如何使用oledb c#.net在excel中插入新行

时间:2016-01-21 11:16:42

标签: c# .net excel oledb

我正在尽力在excel文件中插入新的数据行。 请看一看。我正在使用C#.net framework(3.5)

来解决这个问题

代码:

try{
       string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\rising rent\\csharp-Excel.xls;Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;MAXSCANROWS=15;READONLY=FALSE;ImportMixedTypes=Text'";
       OleDbConnection conn = new OleDbConnection(ConnectionString);
       conn.Open();
       OleDbCommand cmd = new OleDbCommand("INSERT INTO [Inventory$] (C_DATE) VALUES('555')",conn);
       cmd.ExecuteNonQuery();
       conn.Close();

}
catch (Exception ex)
{
       MessageBox.Show(ex.ToString());
}

错误是这个,请看看并分享您的观点

  

“System.Data.OleDb.OleDbException:操作必须使用可更新的查询   System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)   在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object& executeResult)   在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)   在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String method)   在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()   at RisingRentACar.Inventory.button1_Click(Object sender,EventArgs e)在C:\ Users \ Hamza Hafeez \ Documents \ Visual Studio 2015 \ Projects \ RisingRentACar \ RisingRentACar \ Inventory.cs:第82行“

1 个答案:

答案 0 :(得分:4)

所以你的解决方案很接近,我知道这已经超过四个月了,但是要帮助其他人。我遇到了同样的问题,并最终得到了它的工作。

您不需要连接字符串中的所有内容。这对我有用。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
+ FileNameAndPath + ";Extended Properties=\"Excel 12.0 Xml; HDR=YES\";";

"HDR=YES"表示第一行包含标题单元格。您可以使用列名进行插入。

其次,查询必须在列名周围有[]。像:

command.CommandText = "Insert into [Sheet1$] ([ColumnName]) values('Value')";

希望这能帮助像我这样的人看到这篇文章,寻找这个问题的答案。

这是我的整个解决方案:

private void InsertData(List<string> columnNames, List<string> theValues)
{

    OleDbConnection connection = null;
    OleDbCommand command = null;
    string connectionString = "";
    string columns = "";
    string values = "";

    try
    {

        connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtDestination.Text + ";Extended Properties=\"Excel 12.0 Xml; HDR=YES\";";


        using (connection = new OleDbConnection(connectionString))
        {

            connection.Open();

            for (int index = 0; index < columnNames.Count; index++)
            {

                columns += (index == 0) ? "[" + Regex.Replace(columnNames[index], @"\t|\n|\r", "\"") + "]" : ", [" + Regex.Replace(columnNames[index], @"\t|\n|\r", "\"") + "]";
                values += (index == 0) ? "'" + Regex.Replace(theValues[index], @"\t|\n|\r", "\"") + "'" : ", '" + Regex.Replace(theValues[index], @"\t|\n|\r", "") + "'";

            }

            using (command = connection.CreateCommand())
            {

                command.CommandText = string.Format("Insert into [Sheet1$] ({0}) values({1})", columns, values);

                command.ExecuteNonQuery();


            }

        }

    }
    catch (Exception ex)
    {

        ProcessError(ex);

    }

}