1
我传递参数的过程说我缺少@accountNumber,字典键。我有两个使用相同代码的方法。一个工作,一个不工作。这两个程序也是以相同的方式声明的,所以我很茫然。过程期望没有提供的参数 - 日志记录说不同
编辑:原来我在方法中缺少comm.CommandType = CommandType.StoredProcedure;
。
步骤:
CREATE PROCEDURE [dbo].[updateNumbers_StatementDB]
(
@accountNumber varchar(50),
@accountType char(4),
@padding varchar(50),
@proc_dateStart datetime,
@proc_dateEnd datetime
)
方法调用updateNumbers_StatementDB:
using (SqlCommand comm = new SqlCommand("updateNumbers_StatementDB", osql))
{
strMsg = "Statement DB";
_newLog.LogIt(strMsg);
foreach (KeyValuePair<string, string> item in dt)
{ //problem parameter
var param = comm.Parameters.AddWithValue("@accountNumber", item.Key);
//item.key shows up in logging as 1020, what I set it as.
strMsg = "item key: " + item.Key;
_newLog.LogIt(strMsg);
var accountTypeParam = comm.Parameters.AddWithValue("@accountType", item.Value);
strMsg = "item value: " + item.Value;
_newLog.LogIt(strMsg);
var paddingParam = comm.Parameters.AddWithValue("@padding", padding);
var dateStartParam = comm.Parameters.AddWithValue("@proc_dateStart", startDate);
var dateEndParam = comm.Parameters.AddWithValue("@proc_dateEnd", endDate);
var reader = comm.ExecuteNonQuery(); //or NonQuery, etc.
strMsg = "Statement query executed at least once";
_newLog.LogIt(strMsg);
}
}
添加的作品另一种方法:
using (SqlCommand comm = new SqlCommand("updateNumbers_ArchiveDB", osql))
{
comm.CommandType = CommandType.StoredProcedure;
foreach (KeyValuePair<string, string> item in dt)
{
var param = comm.Parameters.AddWithValue("@accountNumber", item.Key);
strMsg = "item key: " + item.Key;
_newLog.LogIt(strMsg);
var accountTypeParam = comm.Parameters.AddWithValue("@accountType", item.Value);
strMsg = "item value: " + item.Value;
_newLog.LogIt(strMsg);
var paddingParam = comm.Parameters.AddWithValue("@padding", padding);
var dateStartParam = comm.Parameters.AddWithValue("@proc_dateStart", startDate);
var dateEndParam = comm.Parameters.AddWithValue("@proc_dateEnd", endDate);
strMsg = "Getting to the bottom of the foreach loop";
_newLog.LogIt(strMsg);
var reader = comm.ExecuteNonQuery(); //or NonQuery, etc.
strMsg = "Query executed at least once";
_newLog.LogIt(strMsg);
}
}
步骤:
CREATE PROCEDURE [dbo].[updateNumbers_ArchiveDB]
(
@accountNumber varchar(50),
@accountType char(4),
@padding varchar(50),
@proc_dateStart datetime,
@proc_dateEnd datetime
)
当您的变量为空时,通常会发生此错误。但是,在这种情况下,我的日志显示变量有一个值。任何想法为什么我的程序没有看到价值?
我们是否可以看到也能起作用的代码(假设它不完全相同)?第二组关注它可能会有所帮助......另外,如果您在循环中重复使用“SqlCommand”并且每次都不清除参数,则会遇到另一个问题。 (你应该在你的'foreach'循环的开头有一个'comm.Parameters.Clear()') – 2014-08-29 19:29:08
呵呵,当我去发布可以工作的代码时,我注意到了这个问题。我失踪了comm.CommandType = CommandType.StoredProcedure;在第二种方法中。立即支付休息时间。无论如何都添加了代码。 – user1729696 2014-08-29 19:45:24
我真的不喜欢“KeyValuePair item”来传递参数。并不是世界上的一切都是一个字符串。只是在说'。 –
granadaCoder
2014-08-29 19:58:57