我在c#中使用以下代码,它试图通过两个给定参数过滤数据。但是,它不起作用。你有什么建议吗?
谢谢, Vancho
这是代码
public void TestQuery()
{
SqlCommand sqlCommand = new SqlCommand(GetQuery());
//sqlCommand.Parameters.Add("@SKU", SqlDbType.VarChar).Value = txtSKU.Text;
//sqlCommand.Parameters.Add("@ProductName", SqlDbType.NVarChar).Value = txtProductName.Text;
sqlCommand.Parameters.AddWithValue("@SKU", txtSKU.Text);
sqlCommand.Parameters.AddWithValue("@ProWductName", txtProductName.Text);
//sqlCommand.Parameters.Add("@SKU", System.Data.SqlDbType.NVarChar).Value = txtSKU.Text;
//sqlCommand.Parameters.Add("@ProductName", System.Data.SqlDbType.NVarChar).Value = txtProductName.Text;
//sqlCommand.Parameters["@SKU"].Value = txtSKU.Text;
//sqlCommand.Parameters["@ProductName"].Value = txtProductName.Text;
//execute query and other stuff
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(GetQuery(), conn);
DataTable dt = new DataTable();
da.Fill(dt);
dt.TableName = "Product Setup";
dataGridView1.DataSource = dt;
conn.Close();
}
private string GetQuery()
{
System.Text.StringBuilder sb =
new System.Text.StringBuilder(@"SELECT ProductID, BarCode, SKU, ProductName, SecondaryIDNumber, ModelIDNumber, ProductDescription
FROM Products WHERE ProductId is not null ");
if (txtSKU.Text != null)
sb.Append("AND SKU = @SKU ");
if (txtProductName.Text != null)
sb.Append("AND ProductName = @ProductName");
return sb.ToString();
}
答案 0 :(得分:3)
您正在设置适配器命令,但是您没有为参数赋值:
SqlDataAdapter da = new SqlDataAdapter(GetQuery(), conn);
而是使用它:
SqlCommand sqlCommand = new SqlCommand(GetQuery());
sqlCommand.Parameters.AddWithValue("@SKU", txtSKU.Text);
sqlCommand.Parameters.AddWithValue("@ProductName", txtProductName.Text);
SqlDataAdapter da = new SqlDataAdapter(sqlCommand, conn);
首先获取您的查询,为您的参数赋值,然后将该查询传递给DataAdapter
您还可以在使用AddWithValue
之前检查参数if(sqlCommand.CommandText.Contains("@SKU"))
sqlCommand.Parameters.AddWithValue("@SKU", txtSKU.Text);
if(sqlCommand.CommandText.Contains("@ProductName"))
sqlCommand.Parameters.AddWithValue("@ProductName",txtProductName.Text);