检索不同的行并声明标量变量

时间:2013-01-30 14:30:52

标签: c# sql-server

我正在尝试从特定的“deliverySerial”中检索数据库中的不同行。

但是我遇到了一个错误,它提示我“声明标量变量=”@ deliverySerial“。

我曾尝试过很多其他方法,但问题仍然存在。

这是连接:

public class DlDbConn
{
public DlDbConn()
{

}

public SqlConnection GetConnection()
{
    SqlConnection dbConn;

    dbConn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;User Instance=True");

    return dbConn;
   }
  }   

数据层中的方法:

    private String errMsg;
    private DlDbConn dbConn;

public testing()
{

    dbConn = new DlDbConn();
}


public DataSet Details(String supplierLogo, String supplierName, String supplierAddr, int poNum, String dateSent, int deliverySerial, String deliveryDate,
                          int quantity, String catSerial, String catName)
{
    SqlConnection conn;
    StringBuilder sql;
    SqlDataAdapter da;
    DataSet detail;



    conn = dbConn.GetConnection();
    detail = new DataSet();
    sql = new StringBuilder();

    sql.AppendLine("SELECT * FROM (select PO.poNum, PO.dateSent, ViewDelivery.deliverySerial, Supplier.supplierName, Supplier.supplierAddr, Supplier.supplierLogo, ViewDelivery.deliveryDate,  Catalog.catSerial, Catalog.catName, PO.quantity, ROW_NUMBER() OVER (PARTITION BY Catalog.catSerial ORDER BY Catalog.catSerial) AS num FROM PO INNER JOIN Supplier ON PO.supplierID = Supplier.supplierID INNER JOIN ViewDelivery ON PO.poNum = ViewDelivery.poNum INNER JOIN Catalog ON PO.catSerial = Catalog.catSerial)AS a WHERE a.num = 1 ");
    sql.AppendLine("AND ViewDelivery.deliverySerial = @deliverySerial");
    try
    {
        conn.Open();
        da = new SqlDataAdapter(sql.ToString(), conn);
        da.SelectCommand.Parameters.AddWithValue("@deliverySerial", deliverySerial);
        da.Fill(detail);
    }
    catch (Exception ex)
    {
        errMsg = ex.Message;
    }
    finally
    {
        conn.Close();
    }

    return detail;

}

2 个答案:

答案 0 :(得分:1)

您必须在MySQL中使用参数表示法,即?而不是@deliverySerial

此外,表ViewDelivery无法在查询的外部访问。

使用:

AND a.deliverySerial = ?

答案 1 :(得分:0)

我认为您的查询不正确。这是Fiddle - 您无法查询ViewDelivery,因为它在您的子查询之外。

尝试从WHERE标准中删除它,因为在子查询中返回该字段:

sql.AppendLine("AND deliverySerial = @deliverySerial");

我认为你不需要“?”,但我可能会弄错。

祝你好运。