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

原文地址:https://www.cnblogs.com/ChengWenHao/p/sqlSeverPart3.html