繁体   English   中英

如何从 SQLite 数据库中以字符串数据类型的形式从 Select 查询中获取数据?

[英]How can I get data from a Select query as a String data type from a SQLite database?

我正在使用这个查询:

string query = "SELECT CAST(FullName AS STRING) FROM Register WHERE ID = 1;

DataTable result = SQLiteDataAccess.MakeQuery(query);

这个 SQLite 表。 我正在使用 System.Data 和 Dapper 来访问 SQLite 数据库。 以下代码用于访问数据库:

public static DataTable MakeQuery(string query)
{
            SQLiteDataReader result;
            DataTable datatable = new DataTable();

        using (SQLiteConnection cnn = new SQLiteConnection(LoadConnectionString()))
        {
            cnn.Open();

            SQLiteCommand command = new SQLiteCommand(query, cnn);
            result = command.ExecuteReader();
            datatable.Load(result);

            cnn.Close();
        }

        return datatable;
    }

当我尝试使用结果时,例如使用以下代码:

        foreach (DataRow record in result.Rows)
        {
            names.Add((string)record["FullName"]);
        }

我收到错误“System.ArgumentException: 'Column 'FullName' 不属于 table .'” 以下本地窗口屏幕截图显示该列的名称是“CAST(FullName AS STRING)”而不是“FullName”,并且数据类型是 int64,而不是字符串。

似乎我在转换数据类型时使用了错误的语法。 它在 SQLite 中必须不同,因为它适用于 SQL Server。 SQLite 中的正确查询是什么? 谢谢

编辑:在评论中尝试了一个建议并得到这个错误,显示数据类型仍然是 Int64。

我没有看到cast ,因为您的数据似乎已经存储在类似字符串的数据类型中。 那么为什么不这样做:

SELECT FullName FROM Register WHERE ID = 1;

如果出于某种原因,您确实需要强制转换,那么您需要为表达式添加别名,以便稍后可以从代码中访问它:

SELECT CAST(FullName AS TEXT) FullName FROM Register WHERE ID = 1;

如果您没有定义请求列的名称,则您的数据库必须采用某种默认值。 通常,这是您的列的名称。 但是,如果您开始抛出函数,对于这样的想法,事情会变得更加复杂。 毕竟,您可以在函数中包含两列。

幸运的是,使用AS关键字可以很容易地解决这个问题。 将您的查询更改为:

string query = "SELECT CAST(FullName AS TEXT) as FullName FROM Register WHERE ID = 1;

注意:我选择在这里使用 FullName,正如您所希望的那样。 只要您在调用中不重复列名,这很好。

我还将STRING类型更改为TEXT因为这是 sqlite3 的实际类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM