C# 过程需要未提供的参数-日志记录的说法不同

C# 过程需要未提供的参数-日志记录的说法不同,c#,sql-server,dictionary,parameters,C#,Sql Server,Dictionary,Parameters,我将参数传递到的过程表示我缺少@accountNumber,字典键。我有两个使用相同代码的方法。一个人工作,一个人不工作。这两个程序也是以同样的方式声明的,因此我感到不知所措 编辑:原来我缺少comm.CommandType=CommandType.storedProcess。 程序: CREATE PROCEDURE [dbo].[updateNumbers_StatementDB] ( @accountNumber varchar(50), @accountType char(4),

我将参数传递到的过程表示我缺少@accountNumber,字典键。我有两个使用相同代码的方法。一个人工作,一个人不工作。这两个程序也是以同样的方式声明的,因此我感到不知所措

编辑:原来我缺少
comm.CommandType=CommandType.storedProcess

程序:

CREATE PROCEDURE [dbo].[updateNumbers_StatementDB]
(
 @accountNumber varchar(50),
 @accountType char(4),
 @padding varchar(50),
 @proc_dateStart datetime,
 @proc_dateEnd datetime
 )
CREATE PROCEDURE [dbo].[updateNumbers_ArchiveDB]
(
 @accountNumber varchar(50),
 @accountType char(4),
 @padding varchar(50),
 @proc_dateStart datetime,
 @proc_dateEnd datetime
 )
调用updateNumbers_语句DB的方法:

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);
                        }
                    }

通常,当变量为null时会发生此错误。但是,在这种情况下,我的日志显示变量有一个值。关于为什么我的过程没有看到值,有什么想法吗?

缺少
comm.CommandType=CommandType.storedProcess

Hah,当我发布有效的代码时,我注意到了这个问题。我缺少comm.CommandType=CommandType.StoredProcess;在第二种方法中。偶尔休息一下是值得的。还是添加了代码。我真的不喜欢用“KeyValuePair项”来传递参数。并不是世界上的一切都是一根弦。就这么说吧。
CREATE PROCEDURE [dbo].[updateNumbers_ArchiveDB]
(
 @accountNumber varchar(50),
 @accountType char(4),
 @padding varchar(50),
 @proc_dateStart datetime,
 @proc_dateEnd datetime
 )