C#如何使用DataAdapter从数据库中正确检索双精度数?

时间:2017-05-30 00:08:56

标签: c# tsql ms-access datagridview dataadapter

语言: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

2 个答案:

答案 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。