INSERT INTO语句中的OleDbCommand语法错误

时间:2014-06-30 15:21:49

标签: c# oledb insert-into oledbcommand

我在INSERT INTO语句中遇到语法错误,我无法弄清楚原因。我已经检查了几个与我的问题几乎完全相同的SO问题,并且在以这种方式更改我的代码后,它仍然无法正常工作。

        var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", oldDb);
        var cnn = new OleDbConnection(cnnStr);
        cnn.Open();

        //make new access table
        using (OleDbCommand command = new OleDbCommand())
        {
            command.Connection = cnn;
            command.CommandText = String.Format("CREATE TABLE [{0}] ([Tag] string, [Text] string)", newTable + "_Diff");
            try
            {
                command.ExecuteNonQuery();
            }
            catch
            {
                //table already exists
            }
        }

        //fill access table
        using (OleDbCommand command = new OleDbCommand())
        {
            command.Connection = cnn;
            command.CommandText = String.Format("INSERT INTO [{0}] (Tag, Text) VALUES (?, ?)", newTable + "_Diff");
            command.Parameters.Add(new OleDbParameter("Tag", ""));
            command.Parameters.Add(new OleDbParameter("Text", ""));
            for (int i = 0; i < (diffText.Length - 1); i++)
            {
                command.Parameters["Tag"].Value = diffTag[i];
                command.Parameters["Text"].Value = diffText[i];
                command.ExecuteNonQuery();
            }
        }

        cnn.Close();

创建表是有效的,所以我知道我的连接没有问题,只是它与我的插入语句不相似。

1 个答案:

答案 0 :(得分:4)

在你的插入命令中,将文本放在方括号内,&#34; text&#34;是一个关键字

command.CommandText = String.Format("INSERT INTO [{0}] (Tag, [Text]) 
                                    VALUES (?, ?)", newTable + "_Diff");

还要确保将您的值包含在单引号中

  

值(&#39;?&#39;,&#39;?&#39;)

希望这有效