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