我正在开发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相关的输出。
请帮我解决这个问题..
提前致谢, 易卜拉欣。
答案 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次