经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MS SQL Server » 查看文章
SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库
来源:cnblogs  作者:在代码的世界里游走  时间:2018/10/26 9:59:51  对本文有异议

SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库

1.连接数据库

  (1)创建连接字符串:

  使用windows身份验证时的连接字符串:

  1. private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;Integrated Security=True";

  使用用户名和密码时的连接字符串:

  1. private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;uid=sa;pwd=test";

  (2)创建连接对象:

  1. SqlConnection con=new SqlConnection(Constr);

  (3)打开连接:

  1. con.Open();

  (4)关闭连接,释放资源:

      强烈建议在使用完连接时一定要关闭连接,以便连接可以返回到ADO.NET连接池中。

  1. con.Close();
  2. con.Dispose();

2.  连接数据库执行sql语句 -- ExecuteNonQuery()的使用

  .NET Framework 提供的 SqlCommand 对象,用于执行SQL语句。

  调用ExecuteNonQuery()方法执行sql语句,返回一个 int 类型的数据,值是影响的行数,在使用insert,update, delete语句时可调用该方法执行sq语句。

  1. public static int ExeNoQuery(string sql)
  2. {
  3. using (SqlConnection con=new SqlConnection(Constr))
  4. {
  5. using (SqlCommand cmd=new SqlCommand(sql,con))
  6. {
  7. con.Open();
  8. return cmd.ExecuteNonQuery();
  9. }
  10. }
  11. }

 

3.  连接数据库执行sql语句 -- ExecuteScalar()的使用

  调用 ExecuteScalar() 方法执行sql语句,返回一个 object 类型的数据,值是执行sql语句的结果,在使用聚合函数时可调用该方法执行sq语句。

  1. public static object ExeScalar(string sql)
  2. {
  3. using (SqlConnection con = new SqlConnection(Constr))
  4. {
  5. using (SqlCommand cmd = new SqlCommand(sql, con))
  6. {
  7. con.Open();
  8. return cmd.ExecuteScalar();
  9. }
  10. }
  11. }

 

4.  连接数据库执行sql语句 -- ExecuteReader()的使用

  使用ExecuteReader()方法执行sql语句,返回值为SqlDataReader类型,可以从返回的SqlDataReader中一条一条取数据,该方法用于查询多行多列结果时。

  SqlDataReader只读取数据,只能前进不能后退。使用SqlDataReader时必须保证连接是打开状态。

  SqlDataReader使用完毕后,要把SqlDataReader关闭,释放。

  1. public static SqlDataReader ExeReader(string sql)
  2. {
  3. SqlConnection con = new SqlConnection(Constr);
  4. SqlCommand cmd = new SqlCommand(sql, con);
  5. con.Open();
  6. SqlDataReader reder = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  7. return reder;
  8. }

 

5. 连接数据库执行sql语句 -- SqlDataAdapter的使用

  使用SqlDataAdapter,可以将查询的结果填充在datatable中返回。

  1. public static DataTable ExeAdapter(string sql)
  2. {
  3. using (SqlConnection con =new SqlConnection(Constr))
  4. {
  5. using (SqlCommand cmd = new SqlCommand(sql,con))
  6. {using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  7. {
  8. DataTable dt = new DataTable();
  9. con.Open();
  10. da.Fill(dt);
  11. return dt;
  12. }
  13. }
  14. }
  15. }

 

6. 使用带参数的 sql 语句

  为了安全的使用sql语句,防止sql注入,请不要直接使用用户输入的值来拼接sql语句,应使用参数的方式将值传入sql语句执行。

  带参数的sql语句:

  1. string strsql = "insert into tbUsers(UserName,Age,Email,DepartmentID) values(@uName,@uAge,@uEmail,@uDeptID)";
  2. SqlParameter[] ps = new SqlParameter[] {
  3. new SqlParameter("@uName",SqlDbType.VarChar) {Value="小明"},
  4. new SqlParameter("@uAge",SqlDbType.Int) {Value=25 },
  5. new SqlParameter("@uEmail",SqlDbType.VarChar) {Value="xiaoming@qq.com" },
  6. new SqlParameter("@uDeptID",SqlDbType.VarChar) {Value="1001" } };
  7. int iRow = ExeNoQuery(strsql, ps);
  8. if (iRow>0)
  9. {
  10. Console.WriteLine("影响的行数:{0}",iRow);
  11. }
  12. Console.ReadKey();

  执行带参数的sql语句:

  1. public static int ExeNoQuery(string sql, SqlParameter[] para)
  2. {
  3. using (SqlConnection con = new SqlConnection(Constr))
  4. {
  5. using (SqlCommand cmd = new SqlCommand(sql, con))
  6. {
  7. if (para != null)
  8. {
  9. cmd.Parameters.AddRange(para);
  10. }
  11. con.Open();
  12. return cmd.ExecuteNonQuery();
  13. }
  14. }
  15. }

 

7. ADO.NET连接池

  (1) 连接池使新连接必须打开的次数得以减少。

  (2) 启用ADO.NET连接池后,创建一个连接对象,不会立刻关闭。后面的其他连接对象可以直接使用。

  (3) 连接池中的对象过一段时间没有被访问会自动销毁。(如果空闲时间达到大约 4-8 分钟,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。

  (4) 默认情况下,在 ADO.NET 中连接池是启用的。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号