首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用SqlCommand?

重用SqlCommand?
EN

Stack Overflow用户
提问于 2009-03-22 01:49:00
回答 2查看 36K关注 0票数 53

我真的不确定这是否可能。

我目前正在做一个大学项目,我有一个使用存储过程的函数。我想知道是否可以使用相同的SqlCommand实例,并应用更新后的参数,在相同的函数中再次调用存储过程。

假设我的代码中有这样的内容:

代码语言:javascript
复制
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的参数并再次调用存储过程?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-22 02:02:10

是。您需要确保在每次调用之间调用myCommand.Parameters.Clear以便转储参数,但是没有什么可以阻止您重用对象。(我不经常使用C#,所以文本中可能有一两个错误)

代码语言:javascript
复制
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();
票数 62
EN

Stack Overflow用户

发布于 2009-03-22 02:03:19

是!你绝对可以做到。在函数中,您也可以重用相同的连接(我不建议在更大的范围内重用connection对象,但这是可能的)。

你也可以这样做:

代码语言:javascript
复制
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_idusing块就像在try/catch中包装您的连接以确保它是关闭的。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/670407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档