如何使用oleDbDataAdapter.Update(myDataSet)更新excel文件 [英] How do I update excel file with oleDbDataAdapter.Update(myDataSet)
问题描述
我不断得到一个InvalidOperationException(更新需要一个有效的UpdateCommand传递DataRow集合与修改的行)。我只是不明白更新命令有什么问题。
I keep getting an InvalidOperationException ("Update requires a valid UpdateCommand when passed DataRow collection with modified rows"). I just cant work out what's wrong with the update command.
这是我到目前为止的代码:
Here's the code I have so far:
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上有几个简单的例子,我还没有能够工作
Although there are several simple examples on google, I have not been able to work out a solution.
推荐答案
您尚未设置 UpdateCommand
属性of clientAdapter。
You haven't set the UpdateCommand
property of clientsAdapter.
您已经创建了一个名为updateCmd的 OleDbCommand
,但是您已经设置了InsertCommand财产:
You've created a OleDbCommand
called "updateCmd", but then you've set the InsertCommand property to it:
clientsAdapter.InsertCommand = updateCmd;
我怀疑你想要的:
clientsAdapter.UpdateCommand = updateCmd;
这篇关于如何使用oleDbDataAdapter.Update(myDataSet)更新excel文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!