2012-05-10 2 views
1

Я продолжаю получать InvalidOperationException («Обновление требует действительного UpdateCommand при передаче коллекции DataRow с измененными строками»). Я просто не могу понять, что случилось с командой обновления.Как обновить файл excel с помощью oleDbDataAdapter.Update (myDataSet)

Вот код, который я до сих пор:

OleDbConnection connection; 
    OleDbDataAdapter clientsAdapter new OleDbDataAdapter(); 
    DataSet myDataSet = new DataSet(); 

    public void Setup() 
    { 
     connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Clients.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"; 
     connection = new OleDbConnection(connectionString); 
     connection.Open(); 


     // SQL 
     clientsAdapter.SelectCommand = new OleDbCommand("SELECT * FROM [Clients$]", connection); 
     OleDbCommand updateCmd = new OleDbCommand(
      "UPDATE [Clients$] " + 
      "SET " + 
       "[Family Name] = ?, " + 
       "[Given Name] = ?, " + 
       "Address = ?, " + 
       "[Home Phone] = ?, " + 
       "[Work Phone] = ?, " + 
       "[Mobile Phone] = ?, " + 
       "Email = ?, " + 
       "Status = ?, " + 
       "Comments = ? " + 
      "WHERE " + 
       "[Last Name] = ? AND " + 
       "[First Name] = ?" 

     // SET clause 
     updateCmd.Parameters.Add("Family Name", OleDbType.Char, 100, "Family Name"); 
     updateCmd.Parameters.Add("Given Name", OleDbType.Char, 100, "Given Name"); 
     updateCmd.Parameters.Add("Address", OleDbType.Char, 100, "Address"); 
     updateCmd.Parameters.Add("Home Phone", OleDbType.Double, 100, "Home Phone"); 
     updateCmd.Parameters.Add("Work Phone", OleDbType.Char, 100, "Work Phone"); 
     updateCmd.Parameters.Add("Mobile Phone", OleDbType.Char, 100, "Mobile Phone"); 
     updateCmd.Parameters.Add("Email", OleDbType.Char, 100, "Email"); 
     updateCmd.Parameters.Add("Status", OleDbType.Char, 100, "Status"); 
     updateCmd.Parameters.Add("Comments", OleDbType.Char, 100, "Comments"); 

     // WHERE clause 
     OleDbParameter fName = updateCmd.Parameters.Add("Old Family Name", OleDbType.Char, 100, "Family Name"); 
     fName.SourceVersion = DataRowVersion.Original; 
     OleDbParameter lName = updateCmd.Parameters.Add("Old Given Name", OleDbType.Char, 100, "Given Name"); 
     lName.SourceVersion = DataRowVersion.Original; 

     clientsAdapter.InsertCommand = updateCmd; 

     // create table and fill 
     DataTable clients = new DataTable("Clients"); 
     clientsAdapter.Fill(clients); 
     myDataSet.Tables.Add(clients); 

     connection.Close(); 
    } 

    public void UpdateDb() 
    { 
     connection.Open(); 
     clientsAdapter.Update(myDataSet, "Clients"); // errer occurs here 
     connection.Close(); 
    } 

Хотя есть несколько простых примеров на Google, я не смог выработать решение.

+0

Пожалуйста не добавляйте «- C#» и т. д. к вашим названиям. Для этого нужны теги. –

+0

@john хорошая точка – br3nt

+2

У вас есть «InsertCommand». Где ваша «UpdateCommand»? –

ответ

3

Вы не установили UpdateCommand собственности клиентовAdapter.

Вы создали OleDbCommand под названием "updateCmd", но тогда вы установите свойство InsertCommand к нему:

clientsAdapter.InsertCommand = updateCmd;

Я подозреваю, что вы хотели:

clientsAdapter.UpdateCommand = updateCmd;

+0

Омг, я не могу поверить, что сделал это (служит мне, прямо для копирования и вставки). Это было полностью в моем списке задач: - /. – br3nt

 Смежные вопросы

  • Нет связанных вопросов^_^