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