簡體   English   中英

執行ms-access查詢時出錯

[英]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語句。 嘗試將其分為兩個不同的步驟:

  1. 插入CompanyDetails表
  2. 插入UserCompanyDetails表

希望這對你有所幫助

你不能擁有; 在Access中的查詢中。 請參閱http://office.microsoft.com/en-us/access-help/HV080760224.aspx您必須按照@juanreyesv的建議單獨執行兩個插入操作

你將不得不做3個查詢,

  1. 使用您的sql執行插入: "Insert into CompanyDetails([CompanyName],[CompanyAddress],[ContactID]) values ('" + companyName + "','" + companyAddress + "','" + contactID + "')
  2. 使用Select @@identity獲取Select @@identity並將其存儲在變量say idnt
  3. 使用2.中獲得的標識值進行第三次插入: "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM