【问题标题】:Select return empty on a correct statement在正确的语句上选择 return empty
【发布时间】:2013-01-31 18:17:14
【问题描述】:

我刚刚在 SQLite.NET 库中发现了一个错误。我有一个函数,它返回一个包含 Select 命令内容的字符串数组。代码如下:

string selectSQL = "SELECT id, token FROM Files WHERE (name LIKE 'Client.rar') AND (folder_id IN (SELECT id FROM Directories WHERE Path || name || '\' LIKE 'C:\Documents and Settings\Django\'))";
SQLiteCommand selectCommand = new SQLiteCommand(selectSQL, sqliteCon);
SQLiteDataReader dataReader = selectCommand.ExecuteReader();

bool results = dataReader.Read();
if (results == true)
{
    List<string> list = new List<string>();
    for (int i = 0; i < dataReader.FieldCount; i++)
    {
        string field = dataReader[i].ToString();
        list.Add(field);
    }
    string[] arr = list.ToArray();

    dataReader.Close();
    sqliteCon.Close();
    return arr;
}
else
{
    string[] arr = { "" };
    return arr;
}

使用 SQLite 数据浏览器程序查看数据库。事实是,之前的软件中的查询有效,而在我的 C# 应用程序中返回的是空结果。

有人知道那是哪里吗?看来一切都是正确的

您好!

【问题讨论】:

  • 尝试将第一行更改为:`string selectSQL = @"SELECT id...'
  • 是什么让你认为这是一个错误..?看起来您可能对从 dataReader 读取的方式有疑问.. 还有为什么您不使用 While 循环,以及在调试代码时.. 您是否在 field 和 @ 中获得任何值987654323@ 如果 arr 变量为 null 或为空,请尝试此操作而不是 string[] arr = {}; arr = list.ToArray();`
  • 一些建议:如果“以前的软件有效”,那么你做了一些事情,现在它不起作用,问题可能出在你所做的而不是以前的软件或库中。
  • @DJKRAZE 大概他只期待一个结果,这就是他不使用 while 循环的原因。但是代码有点奇怪。
  • @DourHighArch 我认为他的意思是查询在 SQLite 数据浏览器中产生了结果,但他没有在他的应用程序中得到结果(我想这是因为查询中未转义的反斜杠字符串)。

标签: c# sqlite select


【解决方案1】:

我会继续回答这个问题:

尝试将第一行更改为:

string selectSQL = @"SELECT id, token FROM Files WHERE (name LIKE 'Client.rar') AND (folder_id IN (SELECT id FROM Directories WHERE Path || name || '\' LIKE 'C:\Documents and Settings\Django\'))";

字符串中有多个反斜杠,如果不转义它们会导致问题。您可以选择将所有反斜杠替换为两个反斜杠(\\ 而不是 \),并且不要将 @ 放在字符串前面。

【讨论】:

  • 好吧,对不起!! SELECT 命令的字符串没有反斜杠。我为他们放置了完整的选择,以查看查询是否正确。我使用的代码如下: string selectSQL = "SELECT id, token FROM Files WHERE (name LIKE '"+name+"') AND (folder_id IN (SELECT id FROM Directories WHERE Path || name || '\\' LIKE '"+path+"'))";
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多