2013-06-06 115 views
1

我曾嘗試使用以下代碼刪除表中的一行,但出現錯誤。執行以下c#代碼時出錯

{System.Data.OleDb.OleDbException: Missing), ], or Item in query expression 
'[CompanyID] not in (Select [CompanyID] from EmployeeDetails 
where [CompanyID] = @cmpID'. 

這裏是我的代碼:

int companyID = _cmpDetailsList[i].CompanyID;   
OleDbCommand upcmd = new OleDbCommand(
    "delete * from CompanyDetails where [CompanyID] not in " + 
    "(Select [CompanyID] from EmployeeDetails where [CompanyID] = @cmpID", conn); 
conn.Open(); 
upcmd.Parameters.AddWithValue("@cmpID", companyID); 
upcmd.ExecuteNonQuery(); 
conn.Close(); 

我以這種格式

OleDbCommand upcmd = new OleDbCommand("delete * from CompanyDetails where [CompanyID]= @cmpID and not in (Select [CompanyID] from EmployeeDetails where [CompanyID] = @cmpID)", conn); 

修改命令我得到了以下錯誤

System.Data.OleDb.OleDbException :查詢表達式'[CompanyID] = @cmpID且不在(從EmployeeDet中選擇[CompanyID]中的語法錯誤(缺少運算符)其中[CompanyID] = @cmpID)'。

請解決它

+3

它適用於'Select *'用於刪除其整行的情況,所以只是'從...中刪除' – V4Vendetta

回答

10

如果你讀了錯誤,它會告訴你這個問題:

OleDbCommand upcmd = new OleDbCommand(
"delete from CompanyDetails where [CompanyID] not in " + 
"(Select [CompanyID] from EmployeeDetails where [CompanyID] = @cmpID)", conn); 

你有一個(但沒有在最後的匹配)

+0

@ V4Vendetta - 很好的捕獲 - 我已經刪除了* * –

+0

delete * from對訪問有效...不知道該使用什麼 – NDJ

+0

+1還有一件事,如果你可以添加的是'@'字符串的使用,這將使查詢更易於閱讀和發現缺失的大括號,好處是OP使用參數 – V4Vendetta