一般情况下,我们对数据库的操作,可以分为两种类型:

  • 不返回记录集的命令,通常是执行插入、修改、删除等操作的SQL语句来更新数据记录;
  • 返回记录集的命令,通常是执行查询操作的SQL语句来获取数据集;

不论哪种操作,我们都需要使用Command对象来执行SQL语句。由于我们使用Sql Cilent Data Provider,那么我们就需要定义SqlCommand对象。

SqlCommang对象的构造方法:

  • SqlCommand()
  • SqlCommand(string cmdText)
  • SqlCommand(string cmdText,SqlConnection connection)
  • SqlCommand(string cmdText,SqlConnection connection,SqlTransaction transation)

从以上的构造方法,我们可以知道,SqlCommand对象需要接受一个有效的SqlConnection,用来告知Command对象需要和那个数据源进行交互。我们还可以在Command对象中传入需要执行的SQL语句。如果需要的话,我们可以传入SqlTransaction参数实现事务。

使用一个Command需要以下步骤:

  1. 声明一个有效的SqlConnection对象;
  2. 声明一个有效的SqlCommand对象;
  3. 为Command对象指定需要操作的SQL语句;
  4. 为Command对象指定关联的Connection实例对象;
  5. 打开Connection对象;
  6. 执行Command对象中的方法进行数据库操作;
  7. 关闭Connection对象;

例子:在smt_test表插入一条新的记录:

别忘记(using System.Data.SqlClient;)

string sConnnectionString = @"server=iwebserver001;database=others_testdb;user id=others_testdb_dbo;password=111111;";
string sSql = "insert into smt_test (name,addtime) values('1',getdate())";
//声明一个有效的SqlConnection对象;
SqlConnection conn = new SqlConnection();
conn.ConnectionString = sConnnectionString;
//声明一个有效的SqlCommand对象;
SqlCommand cmd = new SqlCommand();
//为Command对象指定需要操作的SQL语句;
cmd.CommandText = sSql;
//为Command对象指定关联的Connection实例对象;
cmd.Connection = conn;
//打开Connection对象;
conn.Open();
//执行Command对象中的方法进行数据库操作;
cmd.ExecuteNonQuery();
//关闭Connection对象;
conn.Close();

我们在使用在线对象SqlConnection的时候,要尽早关闭活动连接。可以使用using{}语句块开自动释放活动连接。

使用using以后,Connection对象就不需要Close(),using语句会在代码块结束的时候自动调用相应对象的Dispose()方法来释放对象资源。由于Command对象同样实现了Dispose()方法,我们也同样使用using来自动释放资源。对于涉及到系统资源的对象,建议大家使用using,这是微软推荐的最佳实践方式。

代码修改如下:

string sConnnectionString = @"server=iwebserver001;database=others_testdb;user id=others_testdb_dbo;password=111111;";
string sSql = "insert into smt_test (name,addtime) values('2',getdate())";
using (SqlConnection conn = new SqlConnection())
{
    conn.ConnectionString = sConnnectionString;
    conn.Open();
    using(SqlCommand cmd = new SqlCommand())
    {
        cmd.CommandText = sSql;
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
    }
}