如何使用oleDbDataAdapter.Update(myDataSet)更新excel文件 [英] How do I update excel file with oleDbDataAdapter.Update(myDataSet)

查看:170
本文介绍了如何使用oleDbDataAdapter.Update(myDataSet)更新excel文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不断得到一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆