2

私はsqlitev3を使用していますが、データ型が「ビット」の列がいくつかあるテーブルがあります。このテーブルにビット列に値「true」のデータを挿入しましたが、問題は、C#コードを使用してデータを取得すると、常に値「false」が返されることです。

同じクエリと同じデータベースが私のAndroidアプリケーションで正常に機能しています。しかし、C#またはウィンドウからこれらのデータを取得すると、異常な結果が返されます。

Sqlite管理者はクエリペインに正しい結果を表示します.....私はクロームブラウザを使用しています....私のC#コードは

SQLiteConnection sqlite_connection =null;

        if(isTrans)
            sqlite_connection = sqliteTrans.Connection;
        else
            sqlite_connection = this.ConnectionInstance;

        try
        {  
            SQLiteCommand sqlite_command = new SQLiteCommand("SELECT AdditionalServices, VitalObservation from tblReadonlyPatientData where SubscriptionID = 1306", sqlite_connection);
            SQLiteDataReader reader = sqlite_command.ExecuteReader();
            StringBuilder queryToExecute = new StringBuilder();

            while (reader.Read())
            {
                queryToExecute.Append(reader.GetString(0));
            }

            // always call Close when done reading. 
            reader.Close();
            reader = null;
            sqlite_command = null

        }
            catch (Exception e)
            {
                clsException.ExceptionInstance.HandleException(e);
                throw;
            }
            finally
            {
                if (!isTrans && sqlite_connection != null)
                {
                    if (sqlite_connection.State == System.Data.ConnectionState.Open)
                        sqlite_connection.Close();                    
                }
            }     

これらの列はビットデータ型と「true」の値ですが、falseを返します。

4

2 に答える 2

4

私はSQLライトクエリを更新し、ビット列をnvarcharにキャストしたので、「true」または「false」形式の文字列を返します

SQLiteCommand sqlite_command = new SQLiteCommand("SELECT Cast(AdditionalServices as nvarchar(10)) as AdditionalServices, Cast(VitalObservation as nvarchar(10)) as VitalObservation from tblReadonlyPatientData where SubscriptionID = 1306", sqlite_connection);
于 2012-05-30T09:30:49.267 に答える
1

sqlite では、文字列 'true' は False と評価されます。これは、sqlite が文字列を Numeric 型にキャストし、直接 False である 0 を返すためです。

sqlite> select cast('true' as numeric);
0

http://www.sqlite.org/lang_expr.htmlから取得:

SQL 式の結果をブール値に変換するために、SQLite は最初に CAST 式と同じ方法で結果を NUMERIC 値にキャストします。NULL またはゼロ値 (整数値 0 または実数値 0.0) は false と見なされます。他のすべての値は true と見なされます。

したがって、true/false 列を数値型に変更し、True の場合は 1、False の場合は 0 を格納することをお勧めします。

于 2012-04-25T10:02:26.030 に答える