Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回整个数据库的SQLite查询_C#_Sqlite - Fatal编程技术网

C# 返回整个数据库的SQLite查询

C# 返回整个数据库的SQLite查询,c#,sqlite,C#,Sqlite,首先,我使用C,以及SQLite的C包装器 我试图使用以下代码查询我的SQLite数据库,但它不断返回整个数据库,而不是预期的结果。我对sql查询非常陌生,所以请查看我的查询,如果您看到任何可能导致问题的内容,请告诉我 public DataTable queryDatabase(String column, String filter) { string SQL = "SELECT " + column + " FROM SUBCONTRACTOR " + filter

首先,我使用C,以及SQLite的C包装器

我试图使用以下代码查询我的SQLite数据库,但它不断返回整个数据库,而不是预期的结果。我对sql查询非常陌生,所以请查看我的查询,如果您看到任何可能导致问题的内容,请告诉我

public DataTable queryDatabase(String column, String filter)
    {
        string SQL = "SELECT " + column + " FROM SUBCONTRACTOR " + filter;
        SQLiteCommand cmd = new SQLiteCommand(SQL);
        cmd.Connection = connection;
        SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
        DataSet ds = new DataSet();
        try
        {
            da.Fill(ds);
            DataTable dt = ds.Tables[0];
            return dt;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            return null;
        }
        finally
        {
            cmd.Dispose();
            connection.Close();
        }
    }
这是我正在运行的调用上述方法的代码

dataGridView.DataSource = sqliteQuery.queryDatabase("*", "WHERE GLOPolicy != 'True' OR ALPolicy != 'True' OR WCPolicy != 'True' OR ULPolicy != 'True' AND BusinessName LIKE '%" + bySubBusinessNameMaskedTextBox.Text + "%' AND Contact LIKE '%" + bySubContactNameMaskedTextBox.Text + "%'");
一如既往,谢谢你的帮助

编辑: 通过我的查询,我正在尝试选择所有具有

全球政策!=真的还是阿尔卑斯!=为true或WCPolicy!=正确或错误的策略!=真的

BusinessName-LIKE[此处为BusinessName变量]

类似于[contact name variable here]的ContactName

詹姆斯的评论是正确的。 因为和has than OR,您的WHERE子句本质上说:

WHERE 
    GLOPolicy != 'True' OR ALPolicy != 'True' OR WCPolicy != 'True' OR 
    (ULPolicy != 'True' AND BusinessName LIKE '%x%' AND Contact LIKE '%y%')
您可以通过在所有ORd条件周围添加参数来修复,以确保在与ANDs混合之前对其进行评估:

另外:我认为您的代码容易受到攻击。我对C语言不是很流利,但应该有一些内置的方法来将参数传递给查询

编辑: 现在看来,在评论中,这里还发生了其他事情。 我建议使用以下调试方法:

使用推荐的传递参数的方式, 尝试一次仅使用一个类似条件运行查询;验证结果是否符合预期, 确保您传递的参数包含您期望的参数。
除此之外:发布您的架构和数据,因为它只有3行不会有什么坏处。

我们只能猜测,但我猜您的WHERE子句实际上与数据库中的所有记录都匹配。不确定SQLLite的规则,但可能您需要在所有这些OR子句周围加一个括号?取决于您的意图…我真正想要的是有人查看我的查询,因为不,它不匹配数据库中的所有记录@詹姆斯:括号会放在哪里?你是说括号还是括号?它很容易受到SQL注入攻击,我现在很懒,但我很感激你指出这一点。我将尝试上面的方法并返回这里。现在它返回0条记录,而在我当前的沙盒数据库中,它应该返回3条记录中的2条。所有3条记录的GLOPolicy=True,但其中2条记录的ALPolicy!=符合事实的这两个人没有带括号出现。这非常令人沮丧。~>:@代码:在这两种情况下,ALPolicy是空的吗?@Adam:不,它们是假的。False或NULL在这种情况下是相同的,对吗?假设它们都不等于True。如果它们为NULL,则需要添加或ALPolicy为NULL,因为三值逻辑3VL:
WHERE 
    (GLOPolicy != 'True' OR ALPolicy != 'True' OR WCPolicy != 'True' OR 
    ULPolicy != 'True') AND BusinessName LIKE '%x%' AND Contact LIKE '%y%'