> SqlDataReader myR-6ren">
gpt4 book ai didi

c# - SQL Server 和 C# WinForms 错误

转载 作者:行者123 更新时间:2023-11-30 20:10:15 25 4
gpt4 key购买 nike

我在表单加载时调用此方法 ivent GetProducts("");此查询在 sql 中工作正常。它一直有效,直到我添加 WHERE当我在此行上使用调试器时 >> SqlDataReader myReader = cmd.ExecuteReader();谁能给我一些建议?

 public void GetProducts(string find)
{
try
{
using (SqlCommand cmd = new SqlCommand("SELECT ID, BarCode, ArtNumber, ProductName, Price, SelfPrice, PriceWithOutAWD, TotalSelfPrice, UnitsInStock, " +
" Comment, InputDateTime, InputQuantity, Margin, CategoryName, TypeName, ExpDate FROM GetProducts"+
"WHERE BarCode LIKE '%@F%' OR ArtNumber LIKE '%@F%' OR ProductName LIKE '%@F%' OR Price LIKE '%@F%' OR Comment LIKE '%@F%' ",
new SqlConnection(Program.ConnectionString)))
{
cmd.Parameters.AddWithValue("@F", find);
cmd.Connection.Open();

SqlDataReader myReader = cmd.ExecuteReader();
while (myReader.Read())
{

ProductTable.Rows.Add
(
(int)myReader["ID"],
myReader["BarCode"].ToString(),
myReader["ArtNumber"].ToString(),
myReader["ProductName"].ToString(),
(decimal)myReader["Price"],
(decimal)myReader["SelfPrice"],
(decimal)myReader["PriceWithOutAWD"],
myReader["TotalSelfPrice"].ToString(),
myReader["UnitsInStock"].ToString(),
myReader["Comment"].ToString(),
myReader["InputDateTime"].ToString(),
myReader["InputQuantity"].ToString(),
myReader["Margin"].ToString(),
myReader["CategoryName"].ToString(),
myReader["TypeName"].ToString(),
myReader["ExpDate"].ToString()
);
}
cmd.Connection.Close();
}
}
catch (Exception)
{
MessageBox.Show(Program.MsgError1, "Acid", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

}

最佳答案

... FROM GetProducts"+
"WHERE BarCode LIKE ...

应该是(注意 GetProductsWHERE 之间的额外空格)

... FROM GetProducts "+
"WHERE BarCode LIKE ...

也不要用

WHERE BarCode LIKE '%@F%'

要么使用

WHERE BarCode LIKE '%' + @F + '%' 

或者让参数值包含通配符并使用

cmd.Parameters.AddWithValue("@F", "%" + find + "%"); 
...
WHERE BarCode LIKE @F

如果您总是使用前导通配符进行搜索,那么您应该使用

WHERE CHARINDEX(@F,BarCode) > 0

您的查询无论如何都无法使用索引,如果用户搜索包含在模式语法中具有特殊含义的字符的子字符串,则此方法可以避免出现问题。

但是,根据您正在搜索的列的数量和前导通配符,您可能无论如何都应该为此使用全文索引。

关于c# - SQL Server 和 C# WinForms 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com