Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用oleDbDataAdapter.update(myDataSet)更新excel文件_C#_Excel_Oledb_Oledbdataadapter - Fatal编程技术网

C# 如何使用oleDbDataAdapter.update(myDataSet)更新excel文件

C# 如何使用oleDbDataAdapter.update(myDataSet)更新excel文件,c#,excel,oledb,oledbdataadapter,C#,Excel,Oledb,Oledbdataadapter,我一直收到一个InvalidOperationException(“当传递带有修改行的DataRow集合时,更新需要有效的UpdateCommand”)。我就是搞不清楚更新命令出了什么问题 以下是我目前掌握的代码: OleDbConnection connection; OleDbDataAdapter clientsAdapter new OleDbDataAdapter(); DataSet myDataSet = new DataSet(); public

我一直收到一个InvalidOperationException(“当传递带有修改行的DataRow集合时,更新需要有效的UpdateCommand”)。我就是搞不清楚更新命令出了什么问题

以下是我目前掌握的代码:

    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上有几个简单的例子,但我还没有找到解决方案。

您还没有设置clientsAdapter的
UpdateCommand
属性

您已经创建了一个名为“updateCmd”的
OLEDBComand
,但随后将InsertCommand属性设置为:

clientsAdapter.InsertCommand=updateCmd

我怀疑你想要:


clientsAdapter.UpdateCommand=updateCmd

天哪,我真不敢相信我这么做了(为我服务,适合复制和粘贴)。这完全在我的待办事项列表中:-/。您有一个
InsertCommand
。你的
UpdateCommand
在哪里?请不要在标题中附加“-C#”之类的内容。这就是标签的用途。