执行带参数的SQL语句:
(1)如果我们的SQL语句条件很复杂,并且需要判断很多变量的值,例如
" Select * from TestTable where Field_a = "+m_nA+" and Field_b = ' " + m_cB +" ' and Field_c = "+m_nC ....."
上面的m_nA,m_cB等都是一些变量,上面那样写是很容易写错(单引号),而且看起来似乎很复杂,那我们可以用另外一种方式:
string sql="select * from where Field_a = @param_a and Field_b = @param_b and Field_c=@param_c...."
上面就定义了3个参数@param_a,@param_b.... ,他们的类型就封装了,在SQL里面不用我们去考虑了,
定义参数的方式如下
......................
SqlParameter param1=new SqlParameter("@param_a",SqlDbType.Int);//整型参数
SqlParameter param2=new SqlParameter("@param_b",SqlDbType.VarChar);//varchar
SqlParameter param2=new SqlParameter("@param_c",SqlDbType.Int);//Int
SqlCommand sqlCmd=new SqlCommand(sql,conn);//这里的conn就是上节提到的SqlConnection,呵呵
sqlCmd.Parameters.Add(param1);
sqlCmd.Parameters.Add(param2);
sqlCmd.Parameters.Add(param3);
.............
sqlCmd.ExecuteNoQuery();
..........
(2)执行存储过程
执行存储过程的时候,一般都是需要带参数的,2者结合怎么办呢?方法如下:
。。。。。。。
string strProcedureName = "DB_SP_InsertNewUser";//存储过程名
SqlCommand sqlCmd=new SqlCommand(strProcedureName,conn);//指定存储过程
SqlTranscation tran= conn.BeginTransaction();//一个事物
sqlCmd.Transcation = tran;
sqlCmd.CommandType=CommandType.StoreProcedure;//指定命令类型(存储过程)
//后面同上,定义SQL语句和添加参数......
try{//一定要处理异常
sqlCmd.ExecuteNoQuery();//最后执行
tran.Commit();
}
catch(Exception e)
{
tran.RollBack();
}
finally
{
conn.Close();
}
..........