【问题标题】:OleDbException in my update method [closed]我的更新方法中的 OleDbException [关闭]
【发布时间】:2012-11-29 21:45:25
【问题描述】:

为什么会出现这个错误?错误信息是:INSERT INTO 语句中的语法错误。

我想向我的数据库中添加一条记录,但它不起作用。问题出在哪里?

代码是:

using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbDataAdapter DbDataAdabter = new OleDbDataAdapter();
        DbDataAdabter.SelectCommand = new OleDbCommand("SELECT * FROM [Phone-Book]", connection);

        OleDbCommandBuilder cb = new OleDbCommandBuilder(DbDataAdabter);
        connection.Open();
        DataRow dataRow = myDataset.Tables["salam"].NewRow();

        dataRow[1] = textBox2.Text;
        dataRow[2] = textBox3.Text;
        dataRow[3] = textBox4.Text;
        dataRow[4] = textBox5.Text;

        dataRow.EndEdit();
        myDataset.Tables["salam"].Rows.Add(dataRow);

        DbDataAdabter.Update(myDataset , "salam");

        connection.Close();
        connection.Dispose();
    }
}

【问题讨论】:

  • 从 dataRow[0] 开始,然后重试。
  • @HansPassant: dataRow[0] 是自动编号!
  • 我不认为您发布的代码说明了整个故事。您可以发布完整的堆栈跟踪吗?此外,当您在 c# 中使用 using 语句时,对象将被释放,因此请删除代码中的 connection.Dispose() 行。
  • 你在哪里设置DbDataAdabter.InsertCommand
  • @SimonWilson:我应该如何设置?

标签: c# oledb


【解决方案1】:

考虑到信息和结果查询中固有的元数据,该错误与 Update() 方法生成的代码有关。如果您将异常的 SqlString 属性提供给我们会有所帮助,这样我们就可以看到发送到 Sql Server 的内容。

我会告诉你,你的代码首先引起我注意的问题是Select * 的使用。几乎所有使用* 而不是Count(*) 的查询都不应该在生产代码中使用。它们用于从 Management Studio 执行的一次性查询中,但不适用于由程序或其他查询使用的查询。

在这种情况下,SELECT * 使您无法控制查询产生的列数;如果后来有人进来并添加了一列,那么您的应用程序突然开始表现不佳,因为您只需要 3 列,而不是 4 列。在从代码执行的任何 SELECT 语句上使用属性列表。

【讨论】:

  • 我正在从这个站点homeandlearn.co.uk/csharp/csharp_s12p10.html 学习 C#.net 和数据库,它让我学习了这段代码!我不明白你的意思!?
  • 他要求您发布完整的异常,以便我们可以看到您的代码尝试在数据库上执行的实际 SQL 查询。如果您正在学习 c#,为什么不尝试学习 Linq 并使用 Entity Framework?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多