一般情况下,我们对数据库的操作,可以分为两种类型:
- 不返回记录集的命令,通常是执行插入、修改、删除等操作的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需要以下步骤:
- 声明一个有效的SqlConnection对象;
- 声明一个有效的SqlCommand对象;
- 为Command对象指定需要操作的SQL语句;
- 为Command对象指定关联的Connection实例对象;
- 打开Connection对象;
- 执行Command对象中的方法进行数据库操作;
- 关闭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();
}
}