使用 C# 从 sqlite 3 数据库中检索存储在整数字段中的字符串数据

Posted

技术标签:

【中文标题】使用 C# 从 sqlite 3 数据库中检索存储在整数字段中的字符串数据【英文标题】:Retrieve string data stored in integer field from sqlite 3 database using C# 【发布时间】:2012-03-05 07:20:03 【问题描述】:

我有一个包含多个表的 sqlite3 数据库。其中一个有两个字段:s_id和user_id,第一个是整数,第二个是整数主键。 我可以用 SQLite 数据浏览器查看表格内容,表格中有两行。

user_id 值为 1 和 2。

然而,s_id 值是字符串(如“user1”和“user2”),sqlite 数据浏览器会显示这些字符串。

我正在尝试使用 System.Data.SQLite 和 C# 中的以下代码检索信息:

using (SQLiteConnection connection = new SQLiteConnection(string.Format(@"Data Source=0;Legacy Format=True;", path)))

  connection.Open();
  using (SQLiteCommand command = new SQLiteCommand("SELECT * FROM users", connection))
  
    using (SQLiteDataReader reader = command.ExecuteReader())
    
      while (reader.Read())
      
       string user = reader["s_id"].ToString();
      
    
  

我在网上搜索,发现sqlite可以将字符串数据存储在int字段中。但我无法使用 C# 读取这些字符串。结果始终为“0”。即使我在 Watch 中扩展阅读器直到我能够看到对象,那里的值也是 0。 (对应于 user_id 的第二个对象具有应有的值,1 或 2)。

你知道在 C# 中如何检索整数字段中的这个字符串值吗?

谢谢。

【问题讨论】:

如果您只检查 s_id,为什么要为初学者选择 *... 第二个您将连接字符串存储在哪里.. 如果它在 .config 文件中...为什么不只需在您的连接对象中传递该值...?第 3 .. 将此代码包装在 Try Catch 周围,这样如果您有异常...您也可以在此处发布... 您可以搜索存储的数据值。我想知道您将字符串用户变量用于什么..如果您要存储它,那么您将覆盖它,因为您正在设置字符串用户= .....在while循环中..如果要将其存储在2个不同的变量中,则需要添加第二个变量以将其存储在while循环中 @DJKRAZE:这里的问题不是一个例外,而是 C# 不能将“user1”(和其他字符串)转换为 int 的问题,sqlite 很乐意这样做,因此返回的值为总是 0 @DJKRAZE 我只发布了与我需要解决的问题有关的代码。当然,我并没有在我的实际代码中的循环内声明字符串用户,我只是认为将此处发布的代码复杂化是没有意义的。 @Tobias 谢谢,你是绝对正确的。我没有例外。 【参考方案1】:

首先要做的事情:如果您要将 TypeX 存储在数据库列中,请不要将其声明为 TypeY,因为您可以这样做。仅存储适当类型的值(就 sqlite 而言)对于技术独立(如您所见)至关重要。

如果由于某种奇怪的原因,您无法更改数据库本身,您应该在查询中转换值,如下所示:

SELECT CAST(s_id AS VARCHAR(255)) AS s_id FROM users;

【讨论】:

如果是我的数据库,我当然不会使用整数字段来存储字符串。但它不是我的。谢谢,它解决了问题 - 我实际上没有想到使用不同的查询字符串。

以上是关于使用 C# 从 sqlite 3 数据库中检索存储在整数字段中的字符串数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sqlite 数据库中存储和检索 mp3 文件?

从 Android sqlite 数据库中检索大 blob

使用 System.Data.SQLite 和 C# 检索 BLOB

使用 c# 从 access 数据库中检索图像

我可以从服务器检索数据并将其存储在核心数据中吗?

如何使用从我的 SQLite 数据库中检索到的数据填充 tkinter 下拉框?