ADO.NET
1->什么是ADO.NET,能做什么
一套操作数据库的类库
你会写什么SQL语句,ADO.NET就能做什么
2-> 四个对象和四个模型
1->四个对象
连接对象 Connection系对象
执行对象 Command系对象
适配器对象 DataAdapter系对象
读取器对象 DataReader系对象
2->四个模型
1->执行非查询语句的模型 ExecuteNonQuery()
执行增删改,返回所影响的行数。
若执行其他,则返回-1
2->执行查询语句的模型 ExecuteScalar()
执行查询语句,返回第一行第一列的数据 (object)
如果不存在,则返回null
3->读取器的模型 ExecuteReader()
读取所有数据 返回的是一个SqlDataReader对象
4->包工头模型 SqlDataAdapter
什么东西都能帮你做
3->其他知识点
配置文件app.config 处理
<add name="connect",connectionString="Data Source=.; Initial Catalog=zdp;Integrated Security=true">;
SqlHelper(重要,要自己能手写)
参数化查询(防止注入攻击,本质就是存储过程)
string sql="select count(*) from Login where uid=@uid and pwd=@pwd"; SqlParameter []p={ new SqlParameter("@uid",txtUserName.text), new SqlParameter("@pwd",txtUserPwd.text) };
4->连接对象
1->命名空间
System.Data;
System.Data.SqlClient;
2->连接对象 SqlConnection
1 //1.windows验证 2 "Data Source=服务器名称;Initial Catalog=数据库名;Integrated Security=true" 3 //Data Source=.; Initial Catalog=zdp;Integrated Security=true 4 5 //2.sa身份验证 6 "Data Source=服务器名称;Initila Catalog=数据库名;User Id=sa; PassWord=123456" 7 //Data Source=.; Initial Catalog=zdp;User Id=sa;PassWord=123456 8 9 using(SqlConnection con=new SqlConnection(connect)) 10 /*注意1.连接对象不能重复打开 ,当可以重复关闭 11 也就是con.Open()不能写多次*/
3->执行对象 SqlCommand
4->适配器对象 SqlDataAdapter
见下面代码
5->读取器对象 SqlDataReader
见下面代码
注意事项
1-> 返回reader后数据在数据库服务器缓存
2->使用DataReader的时候必须保证Connection为Open状态
3->reader每次读取一条就释放一条所以只能向前不能后退。但是读取速度很快
如果返回多个结果集 ,用NextResult()方法
4->带参数的SQL语句的一个问题
string sql="insert into tess22(Age) values(@age)" //参数不能直接用0 ,如果用0的话,会调用另一个重载函数 //SqlParameter(string parameterName,SqlDbType dbtype),所以显示转换为object; sqlParameter p=new SqlParameter("@age",(object)0);
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static class SqlHelper 2 { 3 public string str=ConfigurationManager.ConnectionStrings["connect"].ConnectionString; 4 public int ExecuteNonQuery(string sql,CommandType type,params SqlParameter[]p) 5 { 6 int r=0; 7 using(SqlConnection con=new SqlConnection(str)) 8 { 9 using(SqlCommand cmd =new SqlCommand(sql,con)) 10 { 11 if(p!=null) 12 cmd.Parameters.AddRange(p); 13 cmd.CommandType=type; 14 con.Open(); 15 r=cmd.ExecuteNonQuery(); 16 cmd.Parameters.Clear(); 17 } 18 } 19 return r; 20 } 21 public object ExecuteScalar(string sql,CommandType type,params SqlParameter[] p) 22 { 23 object obj=null; 24 using(SqlConnection con=new SqlConnection(str)) 25 { 26 using(SqlCommand cmd=new SqlCommand(sql,con)) 27 { 28 if(p!=null) 29 cmd.Parameters.AddRange(p); 30 cmd.CommandType =type; 31 con.Open(); 32 obj=cmd.ExecuteScalar(); 33 cmd.Parameters.Clear(); 34 } 35 } 36 } 37 public SqlDataReader ExecuteReader(string sql,CommandType type,params SqlParameter [] p) 38 { 39 SqlDataReader Reader=null; 40 SqlConnection con=new SqlConnection(str); 41 using(SqlCommand cmd=new SqlCommand(sql,con)) 42 { 43 if(p!=null) 44 cmd.Parameters.AddRange(p); 45 cmd.CommandType=type; 46 try 47 { 48 con.Open(); 49 Reader=cmd.ExecuteReader(CommandBehavior.CloseConnection); 50 return Reader; 51 } 52 catch(Exception) 53 { 54 con.Close(); 55 con.Dispose(); 56 throw; 57 } 58 } 59 } 60 public DataTable GetTalbe(string sql,CommandType type,params SqlParameter[]p) 61 { 62 using(SqlDataAdapter sd=new SqlDataAdapter(sql,con)) 63 { 64 DataSet ds=new DataSet(); 65 if(p!=null) 66 sd.SelectCommand.Parameters.AddRange(p); 67 sd.SelectCommand.CommandType=type; 68 sd.Fill(ds); 69 return ds.Tables[0]; 70 } 71 } 72 //调用方法 73 //int r=SqlHelper.ExecuteNonQuery(sql,CommandType.text,p); 74 }
以上仅是个人的总结,希望对大家有帮助,如有错误还请各位大神指点指点啊。