簡體   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