Where语句在c#中不能正确工作

本文关键字:工作 不能 语句 Where | 更新日期: 2023-09-27 17:53:45

我正在使用MYSQL在我的c#应用程序。

mysql表中有一些字符串值,有一个文本框,客户端可以在其中写入,然后我使用这个语句来显示结果:

"SELECT ID,METER FROM DB.TABLE1 WHERE METER >= '" +TEXT1.text.tostring+"'";  

但是,例如,如果客户端在文本框中写入400,结果是这样的:

50,400,500,600,50,500  

但是我们知道50不会大于400!!
然后我用这个代码:

"SELECT ID,METER FROM DB.TABLE1 WHERE METER <= '" +TEXT1.text.tostring+"'";  

如果客户端在文本框中写入400,结果如下:

300,150,100,250;  

50没有显示!!

你能帮帮我吗??

Where语句在c#中不能正确工作

50比400 "大"当你把它们当作字符串,所以我怀疑这就是你在做的。

第一:永远、永远、永远不要像这样构建SQL。它容易受到SQL注入攻击,导致容易出错的转换,并使您的代码更难阅读。

应该使用参数化的SQL。在这种情况下,您需要的SQL类似于:

SELECT ID,METER FROM DB.TABLE1 WHERE METER >= @Parameter

,然后在参数集合中设置@Parameter参数-首先将其解析为整数(或任何适合您试图表示的值的类型)。

下一步:检查模式中METER的类型。如果它是varchar或一些类似的文本类型,你需要解决这个问题。如果您想将值视为数字,则应该使用合适的数字类型。

<并且>操作符将在数值上完美地工作,因为您已经向传递的值添加了单引号,这可能会导致问题。试试这个

"SELECT ID,METER FROM DB.TABLE1 WHERE METER >= "+TEXT1.text.tostring; 

将用户输入转换为整型,然后在查询中使用整型值

SELECT ID,METER FROM DB.TABLE1 WHERE METER >= Convert.ToInteger(TEXT1.text.ToString()) ;

文本比较不是数值比较。为了避免这种误导行为和sql注入风险,您必须使用参数化查询。

MySQL可以将字符串转换为数字:

var sql = @" SELECT ID, METER FROM DB.TABLE1 WHERE CAST(METER AS UNSIGNED) >= " + Convert.ToInteger(TEXT1.text.ToString());

在MySQL中将数字作为字符串处理时有各种奇怪的事情需要考虑。

我建议阅读:https://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

正如Jon所建议的,更好的解决方案是ALTER表模式以使用数字列数据类型,并在代码中使用SQL参数,特别是当您似乎正在处理用户输入时。