2012-11-29 27 views
-4

为什么我有这个错误?错误消息是:INSERT INTO语句中的语法错误。OleDbException在我的更新方法中

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

的代码是:

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(); 
    } 
} 
+0

从dataRow [0]开始,然后重试。 –

+0

@HansPassant:dataRow [0]是自动麻烦的! –

+0

我必须写这个!? –

回答

3

该错误是由Update()方法生成的代码,给定查询中的信息,结果固有的元数据。如果您向我们提供了异常的SqlString属性,那么我们可以看到发送到Sql Server的内容。

我会告诉你,你的代码首先跳出来的问题是使用Select *。几乎任何使用*而不是Count(*)的查询都不是您应该在生产代码中使用的查询;它们可用于从Management Studio执行的一次性查询,但不适用于由程序或其他查询使用的查询。

在这种情况下,SELECT *允许您不控制查询产生的列数;如果稍后有人加入并添加一列,突然间你的应用程序开始表现不好,因为你只需要3列,而不是4。使用从代码执行的任何SELECT语句的属性列表。

+0

我正在学习C#.net和数据库从这个网站http://www.homeandlearn。 co.uk/csharp/csharp_s12p10.html 它学到了这段代码!我不明白你的意思是什么!? –

+0

他要求您发布完整的异常,以便我们可以看到您的代码试图在数据库上执行的实际SQL查询。如果你正在学习c#,你为什么不尝试学习Linq并使用Entity Framework? – Mark