![](/img/trans.png)
[英]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.