繁体   English   中英

OleDBException未处理:查询中的语法错误(不完整的查询子句)

[英]OleDBException was unhandled: Syntax error in query (Incomplete query clause)

我正在尝试通过C#在Access数据库上执行一个非常简单的SQL语句。

该语句是这样的:

select M_PASSWORD from TB_USERS where M_USERNAME = 'myuser'

这是我用来执行SQL语句的C#代码:

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sources.global_variables.db_source;
using (OleDbConnection connection = new OleDbConnection(connString))
{
    connection.Open();
    OleDbDataReader reader = null;
    OleDbCommand command = new OleDbCommand("SELECT @1 from @2 WHERE @3='@4'", connection);
    command.Parameters.AddWithValue("@1", db_column);
    command.Parameters.AddWithValue("@2", db_table);
    command.Parameters.AddWithValue("@3", db_where_column);
    command.Parameters.AddWithValue("@4", db_where_value);
    reader = command.ExecuteReader();
    //rest of code

一旦我到达该行reader = command.ExecuteReader(); ,读取器将无法执行查询,并显示以下错误消息: OleDBException was unhandled: Syntax error in query (Incomplete query clause) 我已经调试了代码,以查看是否可以在参数值中看到任何错误的分配,但是它们看起来不错。

此外,在数据库的查询分析器上执行完全相同的查询,我检索了所需的值。

谁能给我一个提示以发现问题并了解我的错在哪里?

我认为您不能选择列名称作为这样的参数。 可能是问题所在。

将if语句或其他条件语句用作参数,并将查询移至条件语句内部。

我认为参数不能以您发布的方式使用。 参数用于填充值(即,将DateTime值作为要在表中更新的DateTime列的值放置在update语句中)。

尝试更改代码,以使列名和表名以文本形式提供或以字符串形式填充。 如果要在where子句中填写不同的列名,不同的表名和不同的列名,则可以构建查询字符串。 因此,除了您发布的内容以外,请尝试其他类似的操作:

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sources.global_variables.db_source;
using (OleDbConnection connection = new OleDbConnection(connString))
{
    connection.Open();
    OleDbDataReader reader = null;
    string strQuery = "SELECT " + constStringColumnName1 + " FROM " + theTableNamePassedInAsString + " WHERE " + strWhereClauseBuiltEarlierInThisFunction + " = '@1'";
    OleDbCommand command = new OleDbCommand( strQuery , connection);
    command.Parameters.AddWithValue("@1", db_where_value);
    reader = command.ExecuteReader();
    //rest of code
}

当然,您可以设置字符串格式并插入更改的选择列名称,表名称和where子句。 生成您的选择/命令字符串,然后使用“参数”填写实际值,这是正常用法。

尝试删除“ on where参数”并使用? 像这样的@

OleDbCommand command = new OleDbCommand("SELECT ? from ? WHERE ?=?", connection);
command.Parameters.AddWithValue("column", db_column);
command.Parameters.AddWithValue("table", db_table);
command.Parameters.AddWithValue("where_column", db_where_column);
command.Parameters.AddWithValue("where_value", db_where_value);

我不知道您是否可以在列名上使用参数。 如果无法运行,请尝试使用concat来执行不带参数的查询,而仅在where值上使用参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM