数据库查询将忽略表中的第一行

本文关键字:一行 查询 数据库 | 更新日期: 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.50250等的值。而250大于或等于您的输入+0,例如12018.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
}