Ira*_*ili 2 c# sql sql-server winforms
我在表单load 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);
}
}
Run Code Online (Sandbox Code Playgroud)
... FROM GetProducts"+
"WHERE BarCode LIKE ...
Run Code Online (Sandbox Code Playgroud)
应该(注意GetProducts和之间的额外空间WHERE)
... FROM GetProducts "+
"WHERE BarCode LIKE ...
Run Code Online (Sandbox Code Playgroud)
也不要用
WHERE BarCode LIKE '%@F%'
Run Code Online (Sandbox Code Playgroud)
使用
WHERE BarCode LIKE '%' + @F + '%'
Run Code Online (Sandbox Code Playgroud)
或者,也可以让参数值包含通配符并使用
cmd.Parameters.AddWithValue("@F", "%" + find + "%");
...
WHERE BarCode LIKE @F
Run Code Online (Sandbox Code Playgroud)
如果您将始终使用领先的通配符进行搜索,那么您应该使用它
WHERE CHARINDEX(@F,BarCode) > 0
Run Code Online (Sandbox Code Playgroud)
您的查询无论如何都无法使用索引,如果用户搜索包含在模式语法中具有特殊含义的字符的子字符串,此方法可以避免出现问题.
但是,根据您要搜索的列数和前导通配符,您应该使用全文索引.
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |