为什么变量在 select 查询中不起作用?

Why variable isn’t working in select query?

为什么当我使用绝对值时这有效,但当我尝试使用变量作为查询参数时查询 returns 没有数据?

private void SetBomNumber()
{
   
    try
    {
        da2 = new SqlDataAdapter("SELECT Products.[ProductCode], Max(ISNULL([BomNumber], 0) + 1) AS NewBomSerial FROM Products LEFT JOIN Bom ON Products.ProductCode = Bom.ProductCode GROUP BY Products.[ProductCode] HAVING(((Products.[ProductCode]) = '210002')) ", Cn);
        da2.Fill(dt2);
        if (dt2.Rows.Count > 0)
        {
            int BomNumber= Convert.ToInt32(dt2.Rows[0]["NewBomSerial"].ToString());
            txtBomNum.Text = BomNumber.ToString();
            MessageBox.Show("The Next Serial Is :" + BomNumber);
        }
        else
        {
            MessageBox.Show("The Query Doesn’t Work");
        }
        
    }
    catch (Exception Err)
    {
        MessageBox.Show("This Error Occured :" + Err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);


    }

}

对于变量,这会显示错误消息“查询不起作用”?

private void SetBomNumber()

{


try
{

    da2 = new SqlDataAdapter("SELECT Products.[ProductCode], Max(ISNULL([BomNumber], 0) + 1) AS NewBomSerial FROM Products LEFT JOIN Bom ON Products.ProductCode = Bom.ProductCode GROUP BY Products.[ProductCode] HAVING(((Products.[ProductCode]) = @prcode)) ", Cn);
    da2.SelectCommand.Parameters.AddWithValue("@prcode", "%" + txtprcode.Text + "%");
    da2.Fill(dt2);
    if (dt2.Rows.Count > 0)
    {
        int BomNumber= Convert.ToInt32(dt2.Rows[0]["NewBomSerial"].ToString());
        txtBomNum.Text = BomNumber.ToString();
        MessageBox.Show("The Next Serial Is :" + BomNumber);
    }
    else
    {
        MessageBox.Show("The Query Doesn’t Work");
    }
    
}
catch (Exception Err)
{
    MessageBox.Show("This Error Occured :" + Err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

此代码以其他形式运行没有问题,在此先感谢。

基于@DRapp 的评论,多亏了他,这对我有用: 如果您需要条件是变量的确切值,请使用:

da2 = new SqlDataAdapter("SELECT Products.[ProductCode], Max(ISNULL([BomNumber], 0) + 1) AS NewBomSerial FROM Products LEFT JOIN Bom ON Products.ProductCode = Bom.ProductCode GROUP BY Products.[ProductCode] HAVING(((Products.[ProductCode]) = @prcode)) ", Cn);
           
da2.SelectCommand.Parameters.AddWithValue("@prcode",  txtprcode.Text );

如果你需要条件像你可以使用的变量:

   da2 = new SqlDataAdapter("SELECT Products.[ProductCode], Max(ISNULL([BomNumber], 0) + 1) AS NewBomSerial FROM Products LEFT JOIN Bom ON Products.ProductCode = Bom.ProductCode GROUP BY Products.[ProductCode] HAVING(((Products.[ProductCode]) LIKE @prcode)) ", Cn);
               
   da2.SelectCommand.Parameters.AddWithValue("@prcode", "%" +txtprcode.Text+ "%");

谢谢