2014-08-29 52 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;

相关问题