2012-02-03 152 views
2

我認爲錯誤可能來自我可能使用的保留字,但我不知道哪個字。上次我遇到這個問題是在INSERT INTO語句中,我通過在保留字周圍放置括號來修復它。但是,如果這是一個保留字的問題。當代碼是這樣的時候,我怎樣才能在保留字中加上括號?任何幫助?UPDATE語句中的語法錯誤

 OleDbCommandBuilder cb; 
     cb = new OleDbCommandBuilder(clientAD); 

     DataRow dRow = clientDS.Tables["Client"].Rows[cInc]; 

     bool thingy = false; 
     int defaultInt = 0; 
     byte defualtByte = 0; 
     double defualtDouble = 0.0; 

     #region dRow items 
     dRow["ID"] = textBox3.Text; 
     dRow["ID_Type"] = ""; 
     dRow["LastName"] = textBox1.Text; 
     dRow["FrstName"] = ""; 
     dRow["MI"] = ""; 
     dRow["MassMail"] = thingy; //Bool 
     dRow["BusName"] = ""; 
     dRow["Bus"] = thingy; //Bool 
     dRow["Title"] = ""; 
     dRow["Title2"] = ""; 
     dRow["Sex"] = ""; 
     dRow["Cli_DOB"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["Spo_DOB"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["Salute"] = ""; 
     dRow["Salute2"] = ""; 
     dRow["Spouse"] = ""; 
     dRow["SSAN"] = ""; 
     dRow["Review"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["Occup"] = ""; 
     dRow["AgentNo"] = defaultInt; //Int32 
     dRow["Status"] = ""; 
     dRow["Wedding_DT"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["Flag_1"] = ""; 
     dRow["Flag_2"] = ""; 
     dRow["Flag_3"] = ""; 
     dRow["Flag_4"] = ""; 
     dRow["Flag_5"] = ""; 
     dRow["Flag_6"] = ""; 
     dRow["Flag_7"] = ""; 
     dRow["Flag_8"] = ""; 
     dRow["Flag_9"] = ""; 
     dRow["Flag_10"] = ""; 
     dRow["Group"] = thingy; //Bool 
     dRow["GroupMember"] = thingy; //Bool 
     dRow["KeyWords"] = ""; 
     dRow["Smoker"] = ""; 
     dRow["Married"] = ""; 
     dRow["NumChild"] = defaultInt; //Int32 
     dRow["NetAsset"] = defaultInt; //Int32 
     dRow["Income"] = defualtByte; //Byte 
     dRow["LstUpdate"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["AutoSal"] = ""; 
     dRow["CIP_ID"] = defaultInt; //Int32 
     dRow["EmailAddr_1"] = ""; 
     dRow["EmailAddr_2"] = ""; 
     dRow["UD1"] = ""; 
     dRow["UD2"] = ""; 
     dRow["UD3"] = ""; 
     dRow["UD4"] = ""; 
     dRow["UD5"] = ""; 
     dRow["UD6"] = ""; 
     dRow["UD7"] = ""; 
     dRow["UD8"] = ""; 
     dRow["UD9"] = ""; 
     dRow["UD10"] = ""; 
     dRow["UD11"] = ""; 
     dRow["UD12"] = ""; 
     dRow["UD13"] = ""; 
     dRow["UD14"] = ""; 
     dRow["UD15"] = defualtDouble; //Double 
     dRow["UD16"] = defualtDouble; //Double 
     dRow["UD17"] = defualtDouble; //Double 
     dRow["UD18"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["UD19"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["UD20"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["New"] = thingy; //Bool 
     dRow["TDate"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["TTime"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["ImportID"] = defaultInt; //Int32 
     dRow["SalespTxt"] = ""; 
     dRow["Notepad"] = ""; 
     dRow["ANote"] = ""; 
     dRow["expCount"] = defaultInt; //Int32 
     dRow["PNote"] = ""; 
     dRow["DrLic_Issue"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["DrLic_Exp"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["DrLic_state"] = ""; 
     dRow["CoDrLic_State"] = ""; 
     dRow["CoDrLic_Issue"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["CoDrLic_Exp"] = DateTime.Now.ToShortDateString(); //Date/Time 
     dRow["Void_check"] = ""; 
     dRow["ASER"] = ""; 
     dRow["Anniversery"] = ""; 
     dRow["Client_Note"] = ""; 
     dRow["C o_Citizenship"] = ""; 
     dRow["Attachment"] = ""; 
     dRow["Pass_Notes"] = ""; 
     dRow["Other_Notes"] = ""; 
     dRow["CE_Notes"] = ""; 
     dRow["Comp_Notes"] = ""; 
     #endregion 

     clientAD.Update(clientDS, "Client"); 

我將默認值放入行中,並檢查確保數據類型匹配。而我原本沒有包含字段名稱,而是第一次使用字段索引。

+0

你能發佈錯誤代碼嗎? – czuroski 2012-02-03 20:15:43

+0

執行此代碼時得到的Exact錯誤是什麼? – Akhil 2012-02-03 20:15:45

+0

試着看'cb.GetUpdateCommand()。CommandText'? – Blorgbeard 2012-02-03 20:21:34

回答

1

應該dRow [「C o_Citizenship」]在C和o之間有空格嗎?

+0

是的,這是數據庫製作時的錯字。 – user1161086 2012-02-13 16:02:55

0

我會包裝在一個try/catch,看看它對

try 
{ 
    clientAD.Update(clientDS, "Client"); 
} 
catch(Exception oError) 
{ 
    MessageBox.Show(oError.Message); 
} 

特別嗆人,但如果你把一個斷點實際的MessageBox並在手錶調試窗口整個θ誤差對象看(或本地變量調試窗口),它可能會爲您展示更多細節。對於我們所知的一切,您可能試圖在具有自動增量列的表格上發佈「更新」,該列是專門爲只讀的,並且不會讓您觸摸它。如果您嘗試設置ID,則可能正在考慮更改的值並嘗試強制通過。

此外,你引用你的「clientAD」這是一個OleDbDataAdapter的實例。您可能必須指定作爲主鍵的「列」。

+0

對不起,我花了很長時間纔回到你身邊。我一直在度假。但是我像你說的那樣添加了try/catch,它給我一條消息,讀取「UPDATE語句中的語法錯誤」。是的,我的表有一個自動增量列。第一列ID是自動的。 – user1161086 2012-02-13 15:46:49

+0

@ user1161086,然後我會回頭看看你的OleDbDataAdapter(clientAD)中的「Update」命令。更新命令不應該在其中包含自動增量列作爲UPDATE COLUMN,只能在其WHERE子句中包含......所以這可能是它發生的地方。該命令是爲您生成還是您構建的?如果是這樣,您不能更新auto-inc列(也不插入),因爲它們是有意識的只讀並由數據庫分配。 – DRapp 2012-02-13 16:59:17

+0

正在爲我生成命令。但我添加了MessageBox.Show(cb.GetUpdateCommand()。CommandText.ToString())以查看正在生成的命令。 ID似乎只在WHERE子句中。但是,一切的價值都是「=?」。在where子句中它也是一樣的。如果我自己創建聲明,是否有一種簡單的方法可以實現。正如你所看到的,我正在更新很多領域。 – user1161086 2012-02-13 17:10:53