Wie aktualisiere ich eine excel Datei mit oleDbDataAdapter.Update(myDataSet)
Ich immer eine InvalidOperationException ("Aktualisieren erfordert einen gültigen UpdateCommand, wenn übergeben DataRow-Auflistung mit modifizierten Zeilen"). Ich kann Sie nicht einfach herauszufinden, was falsch mit dem update-Befehl.
Hier der code, den ich bisher:
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();
}
Zwar gibt es mehrere einfache Beispiele, bei google habe ich nicht in der Lage, arbeiten an einer Lösung.
- Sie haben eine
InsertCommand
. Wo ist deinUpdateCommand
? - Bitte nicht "Anhängen" - C#" und wie Sie Ihre Titel. Das ist es, was die tags werden für.
- guter Punkt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie haben nicht die
UpdateCommand
Eigenschaft von clientsAdapter.Den Sie erstellt haben, eine
OleDbCommand
genannt "updateCmd", aber dann haben Sie legen Sie die InsertCommand-Eigenschaft:clientsAdapter.InsertCommand = updateCmd;
Ich vermute Sie wollte:
clientsAdapter.UpdateCommand = updateCmd;