程序或功能期望未提供的参数#2

时间:2012-05-20 19:56:40

标签: c# sql-server-2008

我目前正在尝试为基于网络的应用完成交易;

Procedure or function 'completeTransaction' expects parameter '@dateTime', which was not supplied.

这是该功能的副本。

public static void completeTransaction(string storeCode, string employeeId, DateTime Date, string itemListNoId)
{
    using (SqlConnection conn = new SqlConnection("Data Source = ; Initial Catalog =Business ; Integrated Security = true;"))
    {
        using (SqlCommand command = new SqlCommand("dbo.completeTransaction", conn))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@storeCode", SqlDbType.Int).Value = storeCode;
            command.Parameters.Add("@employeeId", SqlDbType.Int).Value = employeeId;
            **command.Parameters.Add("@Date", SqlDbType.DateTime).Value = Date;**
            command.Parameters.Add("@itemListNoId", SqlDbType.Int).Value = itemListNoId;
            conn.Open();

            command.ExecuteNonQuery();
            conn.Close();
        }
    }
}

我的sql表包含以下表和类型(storeCode,INT,employee,INT,Date,DATETIME,itemListNoId,INT)

5 个答案:

答案 0 :(得分:3)

  

期望参数'@ dateTime'

您传递了名为@Date的参数。

答案 1 :(得分:3)

您不传递名为@dateTime的参数。好像这一行

command.Parameters.Add("@Date", SqlDbType.DateTime).Value = Date;

应该是

command.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = Date;

但是没有SP源代码,很难确定。请记住,SQL Server抱怨参数的NAME而不是其类型。

答案 2 :(得分:2)

参数名称错误:

command.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = Date;

答案 3 :(得分:2)

如果您收到此信息但已传入正确命名的参数,请检查CommandType是否设置为存储过程

cmd.CommandType = CommandType.StoredProcedure;  

我看到这些相同的症状花了很长时间来追踪每个参数如何进入存储过程。

答案 4 :(得分:0)

如先前的答案已正确提到的,此错误的最可能原因是忘记将参数添加到SqlCommand或忘记将命令的类型设置为CommandType.StoredProcedure

如果您已经正确设置了上面的位置并且仍然拉着头发,那么这可能就是原因。

如果将参数值设置为null(例如mySQLParam1.Value = valuePassedToMe,并且如果valuePassedToMenull),则会得到相同的错误(即过程或函数'...'期望参数'...',该参数未提供)。

这可以通过在值需要为DBNull.Value时分配null来解决。

mySQLParam1.Value = valuePassedToMe ?? (object)DBNull.Value;

null分配给参数ADO.Net会将其转换为default。下面是来自SQL Server Profiler的示例。

exec dbo.MyStoredProcedure @mySQLParam1=default,@mySQLParam2=default,@mySQLParam3=default,...

分配DBNull.Value时,生成的SQL变为:

exec dbo.MyStoredProcedure @mySQLParam1=NULL,@mySQLParam2=NULL,@mySQLParam3=NULL,...