2012-11-29 68 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