[英]OleDbException was unhandled: Syntax Error (missing operator) In Query Expression
[英]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.