语言:C#DB:Access(So,OleDbDataAdapter)
我目前的项目,我正在构建一种SQL查询构建器。根据用户从下拉列表中选择的内容,sql命令可能看起来像这样,不确定它是否与问题相关,尽管[]是columns / table()是下拉选项,括号是&n&# 39;实际上那里:
Select * From [db] where [Date] (between) @value1 and @value2 AND [ID] (=) @ID AND [Usd] (=) @Usd
嗯,你明白了。
我通过以下代码运行:
sbuilder = new StringBuilder();
sbuilder.Append("Select * FROM ").Append(Current_Table).Append(" WHERE ");
using (OleDbConnection connection = new OleDbConnection(Con))
{
connection.Open();
string query = sbuilder.ToString();
OleDbDataAdapter da = new OleDbDataAdapter(query, connection);
da.SelectCommand.Parameters.Clear();
//some code to build the string, AND build the select parameters, here's the important one though
da.SelectCommand.Parameters.AddWithValue("@USD", Convert.ToDouble(FilterUSD.Text));
DataTable dt = new DataTable();
da.Fill(dt);
DGVMain.DataSource = dt;
connection.Close();
}
我的问题:
当我按照您的预期检索值时,它们必须与FilterUSD.Text的值匹配,因此当用户搜索12,并且DB包含12.31251时,他将返回0行。如何使它在参数为12时,它将返回所有具有基值12和随后的十进制值的值。我在网上看过的例子似乎是使用sql数据阅读器,并将值检索到变量Double中。
如何使用数据适配器(我正在使用)来填充数据表? (以及后来的数据网格视图)
我的预感是我必须使用我的select命令的参数。
发现此链接,我不知道如何将其转换为我的用途,但作为数据表:Read decimal from SQL Server database
答案 0 :(得分:1)
我假设你唯一一次寻找积极的整数,所以这是我能想到的两种方式。我可能会选择第一个,因为CAST功能会发生任何意外情况。
在WHERE子句中将两个比较添加到大于或等于搜索参数的拾取记录中,并且记录小于搜索参数+ 1。
[Usd] >= 12 AND [Usd] < 13
将db字段强制转换为WHERE子句中的int,以便删除小数位。
cast([Usd] as int) = 12
编辑:没有意识到您使用的是Access(上面是SQL Server)。应该使用它:Int([Usd]) = 12
。
如果您也想使用负数,那么您将从这两个选项中获得不同的结果。
答案 1 :(得分:0)
Select * From [db] where [Date] (between) @value1 and @value2 AND [ID] (=) @ID AND left([Usd],len(Usd)) (=) @Usd
我添加的代码是左边的函数我不知道这是否与访问一起使用但我在sql中使用过这个功能尝试给它一个镜头。如果数据库包含12.33321且您的参数名称为&#34; @ Usd&#34;是12,数据库只会给你你想要的整数,如果-12但数据库包含-12.3123,它仍然会给你-12。