2012-02-03 144 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