SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库
1.连接数据库
(1)创建连接字符串:
使用windows身份验证时的连接字符串:
- private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;Integrated Security=True";
使用用户名和密码时的连接字符串:
- private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;uid=sa;pwd=test";
(2)创建连接对象:
- SqlConnection con=new SqlConnection(Constr);
(3)打开连接:
(4)关闭连接,释放资源:
强烈建议在使用完连接时一定要关闭连接,以便连接可以返回到ADO.NET连接池中。
- con.Close();
- con.Dispose();
2. 连接数据库执行sql语句 -- ExecuteNonQuery()的使用
.NET Framework 提供的 SqlCommand 对象,用于执行SQL语句。
调用ExecuteNonQuery()方法执行sql语句,返回一个 int 类型的数据,值是影响的行数,在使用insert,update, delete语句时可调用该方法执行sq语句。
- public static int ExeNoQuery(string sql)
- {
- using (SqlConnection con=new SqlConnection(Constr))
- {
- using (SqlCommand cmd=new SqlCommand(sql,con))
- {
- con.Open();
- return cmd.ExecuteNonQuery();
- }
- }
- }
3. 连接数据库执行sql语句 -- ExecuteScalar()的使用
调用 ExecuteScalar() 方法执行sql语句,返回一个 object 类型的数据,值是执行sql语句的结果,在使用聚合函数时可调用该方法执行sq语句。
- public static object ExeScalar(string sql)
- {
- using (SqlConnection con = new SqlConnection(Constr))
- {
- using (SqlCommand cmd = new SqlCommand(sql, con))
- {
- con.Open();
- return cmd.ExecuteScalar();
- }
- }
- }
4. 连接数据库执行sql语句 -- ExecuteReader()的使用
使用ExecuteReader()方法执行sql语句,返回值为SqlDataReader类型,可以从返回的SqlDataReader中一条一条取数据,该方法用于查询多行多列结果时。
SqlDataReader只读取数据,只能前进不能后退。使用SqlDataReader时必须保证连接是打开状态。
SqlDataReader使用完毕后,要把SqlDataReader关闭,释放。
- public static SqlDataReader ExeReader(string sql)
- {
- SqlConnection con = new SqlConnection(Constr);
- SqlCommand cmd = new SqlCommand(sql, con);
- con.Open();
- SqlDataReader reder = cmd.ExecuteReader(CommandBehavior.CloseConnection);
- return reder;
- }
5. 连接数据库执行sql语句 -- SqlDataAdapter的使用
使用SqlDataAdapter,可以将查询的结果填充在datatable中返回。
- public static DataTable ExeAdapter(string sql)
- {
- using (SqlConnection con =new SqlConnection(Constr))
- {
- using (SqlCommand cmd = new SqlCommand(sql,con))
- {using (SqlDataAdapter da = new SqlDataAdapter(cmd))
- {
- DataTable dt = new DataTable();
- con.Open();
- da.Fill(dt);
- return dt;
- }
- }
- }
- }
6. 使用带参数的 sql 语句
为了安全的使用sql语句,防止sql注入,请不要直接使用用户输入的值来拼接sql语句,应使用参数的方式将值传入sql语句执行。
带参数的sql语句:
- string strsql = "insert into tbUsers(UserName,Age,Email,DepartmentID) values(@uName,@uAge,@uEmail,@uDeptID)";
- SqlParameter[] ps = new SqlParameter[] {
- new SqlParameter("@uName",SqlDbType.VarChar) {Value="小明"},
- new SqlParameter("@uAge",SqlDbType.Int) {Value=25 },
- new SqlParameter("@uEmail",SqlDbType.VarChar) {Value="xiaoming@qq.com" },
- new SqlParameter("@uDeptID",SqlDbType.VarChar) {Value="1001" } };
- int iRow = ExeNoQuery(strsql, ps);
- if (iRow>0)
- {
- Console.WriteLine("影响的行数:{0}",iRow);
- }
- Console.ReadKey();
执行带参数的sql语句:
- public static int ExeNoQuery(string sql, SqlParameter[] para)
- {
- using (SqlConnection con = new SqlConnection(Constr))
- {
- using (SqlCommand cmd = new SqlCommand(sql, con))
- {
- if (para != null)
- {
- cmd.Parameters.AddRange(para);
- }
- con.Open();
- return cmd.ExecuteNonQuery();
- }
- }
- }
7. ADO.NET连接池
(1) 连接池使新连接必须打开的次数得以减少。
(2) 启用ADO.NET连接池后,创建一个连接对象,不会立刻关闭。后面的其他连接对象可以直接使用。
(3) 连接池中的对象过一段时间没有被访问会自动销毁。(如果空闲时间达到大约 4-8 分钟,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。)
(4) 默认情况下,在 ADO.NET 中连接池是启用的。