2012-04-25 17 views
1

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

同じクエリと同じデータベースが、自分のアンドロイドアプリケーションで正常に動作しています。しかし、私はC#またはWindowsからこれらのデータを取得するとき、それは珍しい結果を返します。

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();      
       } 
      }  

ある ....私はChromeブラウザを使用しています .....クエリペインに、正しい結果を示していますfalseを返します。 http://www.sqlite.org/lang_expr.htmlから撮影

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

:sqliteの直接Falseで0を返すタイプの数値に文字列をキャストしますので、sqliteのに

+0

でくれた文字列を返すので、私はあなたとの1-いくつかのサンプルレコードを追加することができ、SQL liteのクエリを更新し、nvarchar型にビット列をキャストしていますビット列の正確な値、2 - データを取得するためのC#コードの使用? –

+0

質問を更新しました........ – Talha

+0

_exactly_の "bit"型の列と、予期しない結果で使用しているのはどこですか? –

答えて

4

それは「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); 
+0

@ルド実際に私が投稿した上記のソリューションは私に役立ちます、私はあなたとそれを共有したいと思います。 – Talha

1

、 '真' の文字列がFalseに評価され

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

だから私は、あなたがTrueとFalseは0のための数値型と店舗1に、あなたの真/偽の列を変更するお勧めします。

+0

あなたは絶対に正しいですが、大きなプロジェクトでそれを変更しなければならないという問題がありますが、同じことがアンドロイドデバイスでうまくいきます。ありがとうございます。 – Talha

+0

あなたの状況で本当に起こっていることをよりよく理解するために、使用しているC#コードを投稿してください。 –

+0

実際に私が投稿した上記の解決策は私に役立ちます、私はそれをあなたと共有したいと思います。 – Talha

関連する問題