如何在asp.net中的cmd.parameters.addwithvalue()中一次绑定多个值

时间:2010-06-30 12:01:30

标签: c# asp.net ado.net

我正在开发asp.net应用程序。我在web.config中有相同键的3个值 例如:add key =“ids”value =“12333,43434343,434232”。

在aspx.cs中,我这样打电话。

string merchantIds = ConfigurationManager.AppSettings["ids"];
string paramName = null;
foreach (string ids in merchantIds.Split(','))
{
     paramName = ids;           
}
com.Parameters.AddWithValue("@FBUserID", paramName);

我只获得最后一个id输出。我想在这里显示与3个ID相关的输出。

请帮我解决这个问题..

提前致谢, 易卜拉欣。

3 个答案:

答案 0 :(得分:2)

参数是单数,你不能有一个参数呈现多个值。您需要修改proc以处理以逗号分隔的ID并在proc中执行工作,或者对于每个ID,您需要为每个ID运行该过程......

编辑最简单的方法就是这样做:

using (var conn = new SqlConnection(...)) 
{
  using (var command = new SqlCommand(..., conn))
  {
    command.CommandType = CommandType.StoredProcedure;

    // add other parameters here.

    var param = command.Parameters.Add("@FBUserID", SqlDbType.VarChar, 10);
    foreach (string merchant in ConfigurationManager.AppSettings["ids"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
      param.Value = merchant;
      command.ExecuteNonQuery();
    }
  }
}

理想情况下,您应该考虑处理您的商家ID是否真的是最好的设计。

哦,如果你找到了正确的答案,请确保你接受它,否则我们所有的StackOverflowers都真的给你答案......

答案 1 :(得分:2)

如果您正在使用SQL Server 2008,则可以使用表值参数将多个值传递给sproc以加入。

替代方法是按照Matthew的建议传递CSV,或者提供XML blob值。我在这里比较了3种方法:http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html

在我的测试中,表值参数表现最佳,其次是XML方法,然后是CSV方法。

答案 2 :(得分:1)

你的foreach循环是将所有值写入同一个变量,因此只使用最后一个。就像马修说的那样,你必须编辑proc来取你逗号分隔的字符串,或者运行proc 3次