1

特定の「deliverySerial」からデータベースから個別の行を取得しようとしています。

しかし、「Declare Scalar Variable ="@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;

}
4

2 に答える 2

1

?クエリではなく、MySQL のパラメータ表記を使用する必要があり@deliverySerialます。

ViewDeliveryまた、クエリの外側の部分ではテーブルにアクセスできません。

使用する:

AND a.deliverySerial = ?
于 2013-01-30T14:45:46.157 に答える
0

あなたの質問は間違っていると思います。これがFiddleです。ViewDelivery はサブクエリの外部にあるため、クエリを実行できません。

そのフィールドはサブクエリで返されるため、WHERE 基準からそれを削除してみてください。

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

「?」は必要ないと思いますが、間違っている可能性があります。

幸運を。

于 2013-01-30T15:02:17.970 に答える