我不确定这是否可行.
我目前正在开展一个大学项目,我有一个使用存储过程的函数.我想知道是否可以采用相同的SqlCommand
实例并应用更新的参数在同一函数内再次调用存储过程.
让我说我的代码中有这样的东西:
myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; myConn = new SqlConnection(myConStr); myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); myCommand.CommandType = CommandType.StoredProcedure; myCommand.Parameters.AddWithValue("@book_id", bookID); myCommand.Parameters.AddWithValue("@user_id", userID); try { myConn.Open(); myCommand.ExecuteNonQuery();
是否可以更新MyCommand
参数并再次调用存储过程?
是.您需要确保在每次调用之间调用myCommand.Parameters.Clear以转储参数,但没有什么可以阻止您重用该对象.(我不经常使用C#,因此文本中可能有错误或两个错误)
myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; myConn = new SqlConnection(myConStr); myConn.Open(); myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); myCommand.CommandType = CommandType.StoredProcedure; myCommand.Parameters.AddWithValue("@book_id", bookID); myCommand.Parameters.AddWithValue("@user_id", userID); myCommand.ExecuteNonQuery(); myCommand.Parameters.Clear(); myCommand.CommandText= "NewStoredProcedureName"; myCommand.CommandType = CommandType.StoredProcedure; myCommand.Parameters.AddWithValue("@foo_id", fooId); myCommand.Parameters.AddWithValue("@bar_id", barId); mycommand.ExecuteNonQuery(); myCommand.Parameters.Clear(); myCommand.CommandText = " SELECT * FROM table1 WHERE ID = @TID;" myCommand.CommandType = CommandType.Text; myCommand.Parameters.AddWithValue("@tid", tId); SqlReader rdr; rdr = myCommand.ExecuteReader();
是! 你绝对可以做到这一点.在一个函数中,您也可以重用相同的连接(我不建议为更大的范围重用连接对象,但这是可能的).
你也可以这样做:
myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString; using (var cn = new SqlConnection(myConStr) ) using (var cmd = new SqlCommand("team5UserCurrentBooks3", cn) ) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@user_id", SqlDbType.Int).Value = userID; cmd.Parameters.Add("@book_id", SqlDbType.Int); cn.Open(); for(int i = 0; i<10; i++) { cmd.Parameters["@book_id"].Value = i; cmd.ExecuteNonQuery(); } }
这将运行查询10次,并在user_id
每次执行时使用相同,但更改book_id
.该using
块就像在try/catch中包装您的连接以确保它已关闭.