2014-08-29 25 views
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 
) 

當您的變量爲空時,通常會發生此錯誤。但是,在這種情況下,我的日誌顯示變量有一個值。任何想法爲什麼我的程序沒有看到價值?

+1

我們是否可以看到也能起作用的代碼(假設它不完全相同)?第二組關注它可能會有所幫助......另外,如果您在循環中重複使用「SqlCommand」並且每次都不清除參數,則會遇到另一個問題。 (你應該在你的'foreach'循環的開頭有一個'comm.Parameters.Clear()') – 2014-08-29 19:29:08

+1

呵呵,當我去發佈可以工作的代碼時,我注意到了這個問題。我失蹤了comm.CommandType = CommandType.StoredProcedure;在第二種方法中。立即支付休息時間。無論如何都添加了代碼。 – user1729696 2014-08-29 19:45:24

+0

我真的不喜歡「KeyValuePair item」來傳遞參數。並不是世界上的一切都是一個字符串。只是在說'。 – granadaCoder 2014-08-29 19:58:57

回答

3

在第一種方法中缺少comm.CommandType = CommandType.StoredProcedure;

相關問題