C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)

Posted

技术标签:

【中文标题】C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)【英文标题】:C# - Syntax error in INSERT INTO statement (An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll) 【发布时间】:2016-04-17 15:20:04 【问题描述】:
    System.Data.OleDb.OleDbCommandBuilder cb;   //command builder
    cb = new System.Data.OleDb.OleDbCommandBuilder(boosterbaseDa); //re-establish temporary connection 

    DataRow dRow = boosterbaseDs.Tables[drpCardSet.Text].NewRow();  //create new row in set

    dRow[0] = drpCardSet.Text + "-EN" + txtCardSetNo.Text; //grab the data
    dRow[1] = txtCardName.Text;
    dRow[2] = drpCardRarity.Text;
    dRow[3] = drpCardCatagory.Text;
    dRow[4] = updCardInStock.Value;

    MessageBox.Show(dRow[0] + ", " + dRow[1] + ", " + dRow[2] + ", " + dRow[3] + ", " + dRow[4]);

    boosterbaseDs.Tables[drpCardSet.Text].Rows.Add(dRow);   //add row

    boosterbaseMaxRows = boosterbaseMaxRows + 1;

    string cardTable = drpCardSet.Text;

    boosterbaseDa.Update(boosterbaseDs, drpCardSet.Text); 

我似乎卡在最后一行,错误为

System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常,INSERT INTO 语句中的语法错误

我知道也有类似的问题,但我对此非常坚持。

表确实存在,我可以连接到数据库。

进入(进入“LOB”表)的数据示例为 LOB-EN001、Bob、Common、Monster、1。

提前谢谢你 - 山姆

【问题讨论】:

您能出示您的 Insert 语句吗? 你初始化 DA 的选择命令是什么?您确定为该新行分配了正确的值吗?如果您查看详细信息,通常会有更多信息 这是它被初始化的地方: string sql = "SELECT * From " + drpCardSet.Text; boosterbaseDa = new System.Data.OleDb.OleDbDataAdapter(sql, boosterbaseCon);当传递带有新行的 DataRow 集合时,更新需要有效的 InsertCommand。是进一步的细节,是的,我相信它们一定是正确的值 由于表是一个变量 - 来自文本框 - 很有可能您正在尝试更新一个不存在或与 DA 构建目标不同的表, 我尝试用确切的表名 LOB 替换它,但出现了同样的错误 【参考方案1】:

这是一种解决方案。

string connetionString = null;
OleDbConnection connection;
OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
string sql = null;
connetionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=../boosterbase.mdb";
connection = new OleDbConnection(connetionString);
sql = "insert into " + drpCardSet.Text + " values('" + drpCardSet.Text + "-EN" + txtCardSetNo.Text + "','" + txtCardName.Text + "','" + drpCardRarity.Text + "', '" + drpCardCatagory.Text + "', '" + updCardInStock.Text + "')";
try

    connection.Open();
    oledbAdapter.InsertCommand = new OleDbCommand(sql, connection);
    oledbAdapter.InsertCommand.ExecuteNonQuery();
    MessageBox.Show("Row(s) Inserted !! ");

catch (Exception ex)

    MessageBox.Show(ex.ToString());

来自http://csharp.net-informations.com/dataadapter/insertcommand-oledb.htm

通过Update requires a valid InsertCommand when passed DataRow collection with new rows

【讨论】:

以上是关于C# - INSERT INTO 语句中的语法错误(System.Data.dll 中发生“System.Data.OleDb.OleDbException”类型的未处理异常)的主要内容,如果未能解决你的问题,请参考以下文章

为啥会出现“INSERT INTO 语句中的语法错误”?

“INSERT INTO 语句中的语法错误”错误 - 错误是啥?

insert into语句的语法错误

INSERT INTO 语句 Visual Basic 中的语法错误

如何解决“INSERT INTO 语句中的语法错误”

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误