THC ADO.NET
Ado.Net概述
{
string con = ConfigurationManager.ConnectionStrings["mydbconn"].ToString();
SqlConnection conn = new SqlConnection(con);
conn.Open();
SqlCommand cmd = new SqlCommand("select 学号,姓名,地址 from test", conn);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows)
{
while (dr.Read())
{
ListItem li = new ListItem(dr.GetString(1), dr.GetString(0));
DropDownList1.Items.Add(li);
}
dr.Close();
}
}
1、dr.GetString(1), dr.GetString(0) 获取指定列的字符串的形式dr.GetString(1)=text,dr.GetString(0)=value
SQL语句
1、查询语句
Ps:1、不能更新主键
2、如果没有制定where语句,那么将更新所有行的数据
3、如果插入非数列指定的类型,将不会执行命令并返回错误,如将文字插入到int类型列中
4、插入到nvarchar数据类型的列中的数据将被删除所有尾随空格
3、添加新记录
insert into table_name values('吴有鋆',100,'www.tiger9.com')
Ps:1、如果要替换现有的数据,必须先删除或者改掉
2、每个列名在字符串中只能出现一次
3、如果省略列名,则默认从按照列的序号升序依次填充数据
4、如果列名提供了三个,而值提供了四个,那么除非该列有默认值或者具有自动增量,否则会出错,如果列允许空值,那不提交数据也没关系
5、如果列列表和值列表不对应,显示指定列和值的对应关系
4、删除记录
Ps:1、如果没有指定条件,将删除所有的行
2、如果指定了条件,那么所有符合条件的行都将被删除
3、如果目标数据行任意一行违反了FOREIGN KEY约束,删除失败
5、联合查询
内部联接:内部联接包括同等联接和自然联接
外部联接:外部联接可以是左向外部联接、右向外部联接或完全外部联接
在From子句中可以用下列某一组关键字来指定外部联接:
LEFT JOIN 或 LEFT OUTER JOIN(左联接)
左边有数据右边没有的,右边用空格代替,右边有数据的,左边没有,直接不显示
RIHGT JOIN 或 RIGHT OUTER JOIN(右联接)、
右边有数据左边没有的,左边用空格代替,左边有数据的,右边没有,直接不显示
FULL JOIN 或 FULL OURER JOIN(完全外部联接)
左边有数据右边没有的,右边用空格代替,右边有数据左边没有的,左边用空格代替
ObjectDataScors对象
注意事项 1、Updata时参数名必须与查询数据的参数名,数据库字段名相同
2、Delete时数据控件必须设置主键
3、Updata防止用户输入',出错
sqlcmd.Parameters.AddWithValue("@Name", Name);
//用@Name替代字符串,使用sqlcmd.Parameters.AddWithValue将两者建立连接
Cammand重点加固
属性方面的
1、CommandText
注释:指定该属性将使用的SQL查询语句或者存储过程名称(字符串类型)
2、CommandType
注释:指定解释CommandText属性的值,默认为Text(枚举类型)
3、Connetion
注释:指定Command的此使用的Connection
4、Parameters
注释:获取与Command有关的所有参数以及它们各自到DataSet列的映射
方法方面的
5、Cancel
注释:试图取消Command的执行
6、Dispose
注释:释放由Component占用的资源
7、ExecuteNonQuery
注释:执行命令并且返回受影响的行数(返回int类型)
8、ExecuteReader
注释:返回一个只读且只进的这么一个数据流,每次只返回一条数据(返回对象类型)
9、ExecuteScalar
注释:执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行
动态新建内存表(DataSet)
DataTable Udt = new DataTable("user"); //user表名
DataTable Bdt = new DataTable("book"); //book表名
ds.Tables.Add(Udt); //添加到表
ds.Tables.Add(Bdt);
Udt.Columns.Add("dc_id", typeof(Int32));
Udt.Columns.Add("name", typeof(string));
Udt.Columns.Add("age", typeof(Int32));
Bdt.Columns.Add("title",typeof(string));
Bdt.Columns.Add("url", typeof(string));
Bdt.Columns.Add("dc_id", typeof(Int32));
object[] udt_d = new object[3]; //实例化对象数组
object[] bdt_d = new object[3];
udt_d[0] = 1;
udt_d[1] = "吴有鋆";
udt_d[2] = 28;
bdt_d[0] = "钢铁是怎样练成的";
bdt_d[1] = "www.qq.com";
bdt_d[2] = 1;
Udt.Rows.Add(udt_d); //将数据添加到表行
Bdt.Rows.Add(bdt_d);
定义表的主键
ds.Tables["user"].Constraints.Add(uc);
PS: 1、UniqueConstraint 主键
2、"uthc" 约束的名称
3、ds.Tables["user"].Columns["dc_id"] 约束的列
4、True 表示约束为主键,如果无true,约束的列的数据不能重复,但不约束为主键
5、Constraints 该表约束的集合
定义表的外键(外键约束)
ds.Tables["book"].Constraints.Add(fkc);
PS: 1、ForeignKeyConstraint 外键
2、"fthc" 外键约束名
3、ds.Tables["user"].Columns["dc_id"] 约束中的父级
4、ds.Tables["book"].Columns["dc_id"] 约束中的子级
5、ds.Tables["book"].Constraints.Add(fkc) 外键约束添加到子级
PS:1、外键约束的另一种方式
2、Relations 链接起来父表与子表关系的集合
外键约束删除数据
string key = GridView1.DataKeys[e.RowIndex].Value.ToString();
DataRow dr=ds.Tables["ta"].Rows.Find(key);
ds.Tables["ta"].Rows.Remove(dr); //移除数据行
PS: 1、DataKeys[e.RowIndex].Value e.RowIndex行的主键的值
2、ds.Tables["ta"].Rows.Find(key) Find获取由主键值指定的行
合并数据(DataSet)
GridView1.DataSource = ds.Tables["t1"];
GridView1.DataBind();
PS: 1、Merge 合并数据表
2、两个表的列名相同(区分大小写)只保留一个(ID,ID true)(ID,id false)
将数据表写入缓存提高系统性能
Cache.Insert("ds_cache", cds, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero);
PS: 1、"ds_cache" 缓存名称
2、cds 插入缓存的对象名称
3、null 对象依赖于某个项,不依赖为null,如果依赖于某个项,依赖项更改时,该对象即无效,并移除缓存
4、DateTime.Now.AddMinutes(2) 添加缓存过期时间
5、TimeSpan.Zero 间隔时间(最后一次访问后,多久自动移除缓存)
移除缓存
存储过程
{
Tsda.SelectCommand = new SqlCommand("Myselect", Tconn);
Tsda.SelectCommand.CommandType = CommandType.StoredProcedure;
Tsda.Fill(Tds, "Student");
return Tds.Tables["Student"];
}
PS: Tsda.SelectCommand = new SqlCommand("Myselect", Tconn); //Myselect存储过程名称
Tsda.SelectCommand.CommandType = CommandType.StoredProcedure; //Command类型为存储过程
PS: Tcmd.Parameters.AddWithValue("@id",ID); //Tcmd存储过程的Parameter(参数)添加对应的值或对象
{
Tcmd.CommandText = "MyUpdate";
Tcmd.CommandType = CommandType.StoredProcedure;
Tcmd.Parameters.AddWithValue("@id",ID);
Tcmd.Parameters.AddWithValue("@name", Name);
Tcmd.Parameters.AddWithValue("@phone", Phone);
Tcmd.Parameters.AddWithValue("@Original_id",ID);
Tcmd.Connection = Tconn;
}
(
@ID nvarchar(10),
@Name nvarchar(4),
@phone float,
@Original_ID nvarchar(10)
)
AS
SET NOCOUNT OFF;
UPDATE [Scontact] SET [ID] = @ID, [Name] = @Name, [phone] = @phone WHERE (([ID] = @Original_ID));
SELECT ID, Name, phone FROM Scontact WHERE (ID = @ID)
可移植数据访问程序
Web.config添加一段配置节
<add key="dbType" value="SqlServer"/>
<!--这里可选值必须是SqlServer或者Access在或者Oracle-->
</appSettings>
调用获取其值
数据库连接
SQL Server
providerName="System.Data.SqlClient" />
<add name="数据库连接名称" connectionString="Data Source=数据源;Initial Catalog=数据库名称 Persist Security Info(持续性安全信息)=true;User ID=用户名;Password=密码" providerName(数据提供程序名称)="命名空间" />
Access
providerName="System.Data.OleDb" />
<add name="数据库连接名称" connectionString="Provider=数据提供程序;Data Source=数据库文件" providerName(数据提供程序名称)="命名空间" />
Enum.Parse 方法 (Type, String)
1:将字符串型转化为(Enum)枚举类型。
例如:现在有个字符串sString,一个枚举EnumName,希望把String类型转换成EnumName类型格式如下:
实例:
{
星期一,星期二,星期三
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write((Week)Enum.Parse(typeof(Week),"2")); //运行结果为"星期三" Week枚举数据类型
lblMeg.Text=((Week)Enum.Parse(typeof(Week), "星期二")).ToString(); //运行结果为"星期二" Week枚举数据类型转换为字符串
}
IDbConnection,IDbCommand,IDbDataAdapter
1、IDbconnection 可以存储多种数据提供程序的Connection
2、IDbCommand 可以存储多种数据提供程序的Command
3、IDbDataAdapter 可以存储多种数据提供程序的DataAdapter