zoukankan      html  css  js  c++  java
  • SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库

    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)打开连接:

    con.Open();

      (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 中连接池是启用的。

  • 相关阅读:
    golang的make
    Go的指针
    vue 修改子组件的数据$refs
    vue中异步函数async和await的用法
    redis锁
    支付宝app支付商户配置
    微信小程序中this.data与this.setData的区别详解
    jQuery动态数字翻滚计数到指定数字的文字特效代码
    中英文判断
    jQuery点击图片弹出大图遮罩层
  • 原文地址:https://www.cnblogs.com/ChengWenHao/p/sqlSeverPart3.html
Copyright © 2011-2022 走看看