如何更新excel文件与oleDbDataAdapter.Update(myDataSet)

我不断得到一个InvalidOperationException(“更新需要一个有效的UpdateCommand与修改后的行传递DataRow集合”)。 我只是不能解决更新命令有什么问题。

这是我迄今为止的代码:

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

虽然在谷歌上有几个简单的例子,我还没有能够找出解决scheme。

您尚未设置clientsAdapter的UpdateCommand属性。

您已经创build了一个名为“updateCmd”的OleDbCommand ,但是您已经将InsertCommand属性设置为:

clientsAdapter.InsertCommand = updateCmd;

我怀疑你想要:

clientsAdapter.UpdateCommand = updateCmd;