[英]error while executing a ms-access query
我創建了一個查詢,在c#中一次插入兩個ms訪問表。 我得到了例外
{System.Data.OleDb.OleDbException:在SQL語句結束后找到的字符。 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&executeResult)的System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)處於System.Data的System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)。 SystemData.Model.CompanyDetailsModel.setCompanyDetailsToDB上的System.Data.OleDb.OleDbCommand.ExecuteNonQuery()處的System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String方法)中的OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object&executeResult) E:\\ Project \\ PBAttendence \\ ModifyPrivileage \\ CompanyDetails \\ Model \\ CompanyDetailsModel.cs:line 62}中的CompanyDetailsDataList _cmpDetailsList)
我的示例代碼如下,請解決我的問題。 對不起,我的英語不好。
int companyID = _cmpDetailsList[0].CompanyID;
string companyName = _cmpDetailsList[0].CompanyName;
string contactID = _cmpDetailsList[0].ContactID;
string companyAddress = _cmpDetailsList[0].CompanyAddress;
if (companyID == -1)
{
OleDbCommand cmd = new OleDbCommand("Insert into CompanyDetails([CompanyName],[CompanyAddress],[ContactID]) values ('" + companyName + "','" + companyAddress + "','" + contactID + "');Insert into UserCompanyDetails([UserID],[CompanyID]) values (" + "Select [UserID] from UserDetails;" + "," + "Select @@identity;" + "); ", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
else
{
OleDbCommand upcmd = new OleDbCommand("update CompanyDetails set [CompanyName] = '" + companyName + "',[CompanyAddress] = '" + companyAddress + "',[ContactID] = '" + contactID + "' where [CompanyID] = @cmpID;", conn);
conn.Open();
upcmd.Parameters.AddWithValue("@cmpID", companyID);
upcmd.ExecuteNonQuery();
conn.Close();
}
現在我分成兩個插入命令,但我收到錯誤{System.Data.OleDb.OleDbException:語法錯誤。 在查詢表達式'從UserDetails中選擇[UserID];
OleDbCommand cmd = new OleDbCommand("Insert into CompanyDetails([CompanyName],[CompanyAddress],[ContactID]) values ('" + companyName + "','" + companyAddress + "','" + contactID + "');", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
OleDbCommand cmd1 = new OleDbCommand("Insert into UserCompanyDetails([UserID],[CompanyID]) values (" + "Select [UserID] from UserDetails;" + "," + "Select @@identity" + ");", conn);
conn.Open();
cmd1.ExecuteNonQuery();
conn.Close();
問題是這行代碼:
OleDbCommand cmd = new OleDbCommand("Insert into CompanyDetails([CompanyName],[CompanyAddress],[ContactID]) values ('" + companyName + "','" + companyAddress + "','" + contactID + "');Insert into UserCompanyDetails([UserID],[CompanyID]) values (" + "Select [UserID] from UserDetails;" + "," + "Select @@identity;" + "); ", conn);
在同一個OleDbCommand
有兩個insert
語句。 嘗試將其分為兩個不同的步驟:
希望這對你有所幫助
你不能擁有; 在Access中的查詢中。 請參閱http://office.microsoft.com/en-us/access-help/HV080760224.aspx您必須按照@juanreyesv的建議單獨執行兩個插入操作
你將不得不做3個查詢,
"Insert into CompanyDetails([CompanyName],[CompanyAddress],[ContactID]) values ('" + companyName + "','" + companyAddress + "','" + contactID + "')
Select @@identity
獲取Select @@identity
並將其存儲在變量say idnt
"Insert into UserCompanyDetails([UserID],[CompanyID]) Select UserID, " + idnt.ToString() + " from UserDetails"
請參閱http://msdn.microsoft.com/en-us/library/ks9f57t0%28VS.71%29.aspx
首先,使用原始sql命令然后生成sql的代碼會更容易。
您可能會考慮制作存儲過程,因為您的命令變得有點復雜
如果我是對的,你目前要做的是:
Insert into table1(x,y,z) values a,b,c;
Insert into table2(x,y) values select * from table3; , @@identity
第二個sql命令在語法和邏輯上都是無效的,因為您在命令期間插入新記錄,所以@@ identity不會是靜態的。
我的建議是做這樣的事情:
Insert into table1(x,y,z) values a,b,c;
declare @table1Id int = @@identity
Insert into table2(x,y) select colA, @table1Id from table3;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.