[英]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.