Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C SQLite vs DataTable:'指定的强制转换无效。'_C#_Sqlite - Fatal编程技术网

C# C SQLite vs DataTable:'指定的强制转换无效。'

C# C SQLite vs DataTable:'指定的强制转换无效。',c#,sqlite,C#,Sqlite,我在从DataTable行获取值时遇到问题 以下是查询: SELECT COALESCE((FE1), 0) + COALESCE((FE2), 0) + COALESCE((FEE), 0) FROM DRC WHERE DTS = '2021-04-21T09:57:47+02:00' 在DB Browser中,它返回以下值:-5700 使用不同的时间戳,它也可能会产生2位小数的值,因此我决定在从DataTable检索时将其转换为十进制 但是下面的代码抛出了一个错误 指定的强制转换无效

我在从DataTable行获取值时遇到问题

以下是查询:

SELECT COALESCE((FE1), 0) + COALESCE((FE2), 0) + COALESCE((FEE), 0) 
FROM DRC 
WHERE DTS = '2021-04-21T09:57:47+02:00'
在DB Browser中,它返回以下值:-5700

使用不同的时间戳,它也可能会产生2位小数的值,因此我决定在从DataTable检索时将其转换为十进制

但是下面的代码抛出了一个错误

指定的强制转换无效


例如,integer、double等类型的结果是相同的。

这是因为您正在执行原始读取,因此DataTable中的返回值将按照基础ORM选择的方式进行类型化,在这种情况下,可能是SQLiteDecimal结构或类似结构

我不明白为什么要使用DataTable,因为您正在读取单个resultset的一行。只需直接使用SQLiteDataReader:

using (var cmd = new SQLiteCommand(query, con))
{
    using (var reader = cmd.ExecuteReader())
    {
        if (reader.Read())
        {
            sum = reader.GetDecimal(0);
        }
    }
}

调试并检查DataTable中返回的数据类型。此外,我从未见过这种从数据表读取数据的方式。您可能应该尝试使用sum+=Convert.ToDecimalrow[0]的标准方法;Field方法没有任何问题—它只是提供了一种访问列值的方便方法—请参阅
using (var cmd = new SQLiteCommand(query, con))
{
    using (var reader = cmd.ExecuteReader())
    {
        if (reader.Read())
        {
            sum = reader.GetDecimal(0);
        }
    }
}