数据库查询将忽略表中的第一行
本文关键字:一行 查询 数据库 | 更新日期: 2023-09-27 17:49:30
我在获取表中第一行的结果时遇到问题。它只是忽略它,结果是第二行。
查询需要从textBox1中给定的值中得到column_b的最高值或相等值。
即,如果我在textBox1中输入12,结果应该是:column_a=1,5|column_b=18,5但它忽略了第一行,并给出column_a=2,5|column_b=25
的结果
使用的表格示例:
+----------+----------+|column_a|column_b|+----------+----------+|1,5 | 18,5||2,5 | 25||4 | 34||6 |47|+----------+----------+
代码:
//Table used from database
string tableused = "main_table";
//Connecting to Database
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data''db''database.mdb");
connection.Open();
//Database Query
OleDbCommand select = new OleDbCommand();
select.Connection = connection;
select.CommandText = "SELECT TOP 1 column_a,column_b FROM " + tableused + " WHERE column_b+0 >=" + textBox1.Text + "+0 ORDER BY column_b+0 ASC";
//Reading the query output
OleDbDataReader reader = select.ExecuteReader();
while (reader.Read())
{
label5.Text = (reader[0].ToString());
label6.Text = (reader[1].ToString());
}
reader.Close();
connection.Close();
有人能解决这个问题吗?
您说您正在使用Text作为数值的数据类型。
现在,您的+0
代码正在查询18.50
、250
等的值。而250
大于或等于您的输入+0
,例如120
。18.50
较小,因此不会在结果集中返回。
是的,Microsoft Access做了很多隐式转换,但你不能像现在这样信任它。
如果需要数值,请使用数字数据类型。
正如Alexander所指出的,您的+"0"
(其目的是强制转换(就是问题所在。
将数字和日期存储在文本字段中是一种常见的错误,因为您希望它们以某种格式显示。始终以格式中立的格式存储数据,即数字字段中的数字和日期或日期/时间字段中的日期。
显示字段时,即将值转换为string
时,应用所需格式。
如果您使用字符串串联来构造SQL命令,则会遇到必须将值转换为对所使用的SQL方言和数据库区域性有效的文字的问题。要找到正确的日期文字并不容易,但数字也有问题,因为不同的文化中使用不同的千位和小数分隔符。因此(为了对抗SQL注入(总是使用命令参数。对于表名来说,这是不可能的,但我认为这些不是用户直接输入的,因此它们是安全的(否则请检查表名是否有效!(。
double d;
if (Double.TryParse(textBox1.Text, out d)) {
select.CommandText = "SELECT TOP 1 column_a, column_b FROM " + tableused +
" WHERE column_b >= @1 ORDER BY column_b ASC";
select.AddWithValue("@1", d);
...
} else {
// Number not valid
}