我正在尝试通过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)
。我已经调试了代码,以查看是否可以在参数值中看到任何错误的分配,但是它们看起来不错。
此外,在数据库的查询分析器上执行完全相同的查询,我检索了我想要的值。
谁能给我一个提示以发现问题并了解我的错在哪里?
我认为参数不能以您发布的方式使用。参数用于填充值(即,将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子句。生成您的选择/命令字符串,然后使用“参数”填写实际值,这是正常用法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句