簡體   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