1

但是,我目前正在尝试为基于 Web 的应用程序完成交易;

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)

4

5 回答 5

3

需要参数“@dateTime”

您传递了一个名为 的参数@Date

于 2012-05-20T19:59:43.390 回答
3

您不传递名为@dateTime 的参数。好像这条线

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

应该

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

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

于 2012-05-20T20:00:12.947 回答
2

参数名称错误:

command.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = Date;
于 2012-05-20T20:00:45.247 回答
2

如果你得到这个并且你已经传入了正确命名的参数,请检查 CommandType 是否设置为存储过程

cmd.CommandType = CommandType.StoredProcedure;  

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

于 2012-12-07T22:39:27.423 回答
0

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

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

如果您将参数值设置为null(例如 mySQLParam1.Value = valuePassedToMe,如果valuePassedToMenull),那么您将得到相同的错误(即过程或函数'...' 需要参数'...',但未提供)。

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

IE

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,...
于 2019-11-07T14:48:11.347 回答