首页 > 代码库 > ADO.NET基础
ADO.NET基础
ADO.NET的组成:程序端数据集:包括:DataSet/DataTable/DataRow... .NET Framework 数据提供程序 :包括Connection/DataAdapter/DataReader/Command
ADO.Net中通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理.SqlCommand表示向服务器提交的一个命令(SQL语句等) , CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等).SqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。执行有多行结果集的用ExecuteReader.
SqlDataReader reader = cmd.ExecuteReader();...
while (reader.Read())
{ Console.WriteLine(reader.GetString(1));
}
reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根据列名动态得到序号.为什么用using。Close:关闭以后还能打开。Dispose:直接销毁,不能再次使用。using在出了作用域以后调用Dispose,SqlConnection、FileStream等的Dispose内部都会做这样的判断:判断有没有close,如果没有Close就先Close再Dispose。
SQL语句使用@UserName表示“此处用参数代替”,向SqlCommand的Parameters中添加参数。防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值.cmd.CommandText = "select * from T_Users where UserName=@UserName and Password=@Password";
cmd.Parameters.Add(new SqlParameter("UserName","admin"));
cmd.Parameters.Add(new SqlParameter("Password",password));
SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset);SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。foreach (DataRow row in dataset.Tables[0].Rows) row["Name"]。
C#中值类型(int、Guid、bool等)是不可以为空的,int i=null是错误的,因此int、bool等这些类型不能表示数据库中的“Null” 。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null 就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。类型转换:不可空类型赋值给可空类型无需显式转换(一定成功),可空类型赋值给不可空类型则需显式转换(不一定成功)。
ADO.NET基础