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