Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL命令参数必须声明变量错误_C#_Sql - Fatal编程技术网

C# SQL命令参数必须声明变量错误

C# SQL命令参数必须声明变量错误,c#,sql,C#,Sql,我有一个返回信息的datatable方法,但我的参数有问题,它不断抛出一个必须声明变量“@SUPartnerNo”错误。我曾尝试用谷歌搜索,但我找到的任何解决方案都帮不上忙。我不想把我的参数直接嵌入到我的查询中,因为这不是一个好的做法 public DataTable SearchInvoiceHeader(string SUPartnerNo, string invoiceNo, string bdate, string edate) { DataTable dt = new Data

我有一个返回信息的datatable方法,但我的参数有问题,它不断抛出一个必须声明变量“@SUPartnerNo”错误。我曾尝试用谷歌搜索,但我找到的任何解决方案都帮不上忙。我不想把我的参数直接嵌入到我的查询中,因为这不是一个好的做法

public DataTable SearchInvoiceHeader(string SUPartnerNo, string invoiceNo, string bdate, string edate)
{
    DataTable dt = new DataTable();

    try
    {
        StringBuilder mySelectQuery = new StringBuilder(9000);


        mySelectQuery.AppendLine(@"SELECT I.[InvoiceNo]
                                    ,I.[SUPartnerNo]
                                    ,I.[OrderNo]
                                    ,I.[RefNo]
                                    ,I.[DocType]
                                    ,I.[SAP_Type]
                                    ,I.[SUName]
                                    ,I.[InvoiceDate]
                                    ,I.[PaymentDate]
                                    ,I.[BaseLineDate]
                                    ,I.[DeliveryDate]
                                    ,I.[DeliveryNoteNo]
                                    ,I.[TotalAmount]
                                    ,I.[StartTime]
                                    ,p.ProcessType
                                    ,s.DocDate
                                    ,s.IDocNo
                                    ,s.TotalValue
                                FROM [dbo].[mainhead] I WITH (NOLOCK) 
                                LEFT JOIN [INV_Processed] p WITH (NOLOCK) 
                                ON p.InvoiceNo = I.InvoiceNo
                                AND p.PartnerNo = I.SUPartnerNo
                                LEFT JOIN dbo.INV_SAP s WITH (NOLOCK) 
                                ON s.InvoiceNo = I.InvoiceNo
                                AND s.SupplierNo = I.SUPartnerNo
                                WHERE
                                (I.SUPartnerNo =@SUPartnerNo) OR  (I.InvoiceNo = @InvoiceNo) 
                                and I.[StartTime] between  @bdate and @edate");
        SqlConnection myConnection;

        myConnection = new SqlConnection(ConnectionString);

        SqlCommand myCommand = new SqlCommand(mySelectQuery.ToString());

        myCommand.Parameters.AddWithValue("@SUPartnerNo", SUPartnerNo);
        myCommand.Parameters.AddWithValue("@InvoiceNo", invoiceNo);
        myCommand.Parameters.AddWithValue("@bdate", bdate);
        myCommand.Parameters.AddWithValue("@edate", edate);
        myCommand.Connection = myConnection;
        myConnection.Open();

        SqlDataAdapter mytable = new SqlDataAdapter(mySelectQuery.ToString(), myConnection);
        myCommand.ExecuteNonQuery();
        mytable.Fill(dt);


        myConnection.Close();

您将参数添加到错误的命令中。
Fill
方法不使用您创建的
myCommand
对象。将参数添加到
SqlDataAdapter
中:

mytable.SelectCommand.Parameters.AddWithValue(...)

您可以从代码中省略与
myCommand
相关的任何内容,包括
ExecuteNonQuery()
调用。

或者
mytable.SelectCommand=myCommand(并且不指定myCommand的连接属性)。