2012-04-25 49 views
1

我正在使用sqlite v3,我有表中有一些数据类型为'bit'的列。我已经在这个表中插入了一些数据,在位列中的值为'true',但问题是,当我使用C#代码检索数据时,它总是返回值'false'。sqlite位列在每种情况下都返回'false'值

相同的查询和相同的数据库工作正常我的android应用程序。但是,当我从C#或窗口中检索这些数据时,它会返回不寻常的结果。

sqlite的管理员显示正确结果查询窗格..... 我使用Chrome浏览器.... 我的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();      
       } 
      }  

这些列是bit数据类型和“真”值,但返回false。

+0

你可以添加1-用一些样本记录位列中的确切值,以及2- C#代码用于检索数据? – 2012-04-25 10:15:23

+0

我已更新问题........ – Talha 2012-04-25 10:48:33

+0

哪一列_exactly_具有“位”类型,您将在哪里使用它,并获得意外的结果? – 2012-04-25 11:35:37

回答

4

我有更新SQL精简版查询和投比特列到nvarchar的,所以这回我“真”或“假”格式字符串

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 2012-05-30 09:38:34

1

对于SQLite,字符串“真”的计算结果为假,因为sqlite的注塑字符串到数字类型,返回0,这是直接题:从http://www.sqlite.org/lang_expr.html两者

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

要将SQL表达式的结果转换为布尔值,SQLite 首先以与CAST 表达式相同的方式将结果转换为NUMERIC值。 NULL或零值(整数值0或实数值0.0) 被认为是错误的。所有其他值都被认为是正确的。

因此,我建议您将true/false列更改为数字类型,并将1存储为True,将0存储为False。

+0

你是绝对正确的,但问题是我们必须改变它在我们的大型项目,但同样的事情在Android设备上工作正常。你可以带一些其他的替代解决方案,所以我必须做最低限度的改变......谢谢 – Talha 2012-04-25 10:21:27

+0

请张贴您使用的C#代码,因为它应该让您更好地了解您的情况中发生了什么。 – 2012-04-25 10:23:33

+0

实际上我发布的上述解决方案可以帮助我,所以我想与您分享。 – Talha 2012-05-30 09:37:46

相关问题