C# 使用oledb编写包含大量数据的excel时出错

C# 使用oledb编写包含大量数据的excel时出错,c#,C#,我在使用oledb将数据插入Excel时遇到问题 问题是:当我试图将不到65000行的数据写入Excel时,它是有效的。但当我尝试写入65000多行时,会出现一个错误: 电子表格已满 我想一次写日期是有限制的 我有超过1000000行的数据要写 一行由6列和大约100个字符组成 这是我的源代码 private static OleDbConnection CreateConnection(string ExcelPath) { OleDbConnectionStringB

我在使用oledb将数据插入Excel时遇到问题

问题是:当我试图将不到65000行的数据写入Excel时,它是有效的。但当我尝试写入65000多行时,会出现一个错误:

电子表格已满

我想一次写日期是有限制的

我有超过1000000行的数据要写

一行由6列和大约100个字符组成

这是我的源代码

private static OleDbConnection CreateConnection(string ExcelPath)
    {
        OleDbConnectionStringBuilder ConnectionBuilder = new OleDbConnectionStringBuilder();
        ConnectionBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";
        ConnectionBuilder.DataSource = ExcelPath;
        ConnectionBuilder.Add("Extended Properties", "Excel 8.0");
        return new OleDbConnection(ConnectionBuilder.ToString());
    }

using (OleDbConnection Connection = CreateConnection(@"C:\userinfo.xls"))
        {
            Connection.Open();
            OleDbCommand tempCmd = Connection.CreateCommand();
            tempCmd.CommandText = CreateTableQury(dt, "Sheet1");
            tempCmd.ExecuteNonQuery();
            tempCmd.CommandText = CreateInsertQuery(dt, tempCmd.Parameters, "Sheet1");
            int extime = 1;
            foreach (DataRow Row in dt.Rows)
            {
                for (int t = 0; t < tempCmd.Parameters.Count; t++)
                {
                    tempCmd.Parameters[t].Value = Row[t];

                }
                tempCmd.ExecuteScalar();
                extime++;
                if ((extime % 1000) == 0)
                {
                    Console.WriteLine("EXCEL " + extime + " Line / time:" + sw.Elapsed.ToString());
                }
            }
            Connection.Close();
        }


public static string CreateTableQury(DataTable Table, string SheetName)
    {
        string Query = "CREATE TABLE [" + SheetName + "] (";

        for (int i = 0; i < Table.Columns.Count; i++)
        {
            Query += Table.Columns[i].ColumnName + " text";
            if (i < Table.Columns.Count - 1) Query += ", ";
            else Query += ")";
        }

        return Query;
    }

    public static string CreateInsertQuery(DataTable Table, OleDbParameterCollection Parameters, string SheetName)
    {

        string Query = @"INSERT INTO [" + SheetName + "] VALUES (";

        for (int i = 0; i < Table.Columns.Count; i++)
        {
            Query += "@Param" + i.ToString();

            if (i < Table.Columns.Count - 1) Query += ", ";
            else Query += ")";

            OleDbParameter Parameter = new OleDbParameter("@Param" + i.ToString(), DbType.String);
            Parameters.Add(Parameter);

        }

        return Query;
    }
专用静态OleDbConnection CreateConnection(字符串ExcelPath)
{
OleDbConnectionStringBuilder ConnectionBuilder=新的OleDbConnectionStringBuilder();
ConnectionBuilder.Provider=“Microsoft.Jet.OLEDB.4.0”;
ConnectionBuilder.DataSource=ExcelPath;
添加(“扩展属性”、“Excel 8.0”);
返回新的OLEDB连接(ConnectionBuilder.ToString());
}
使用(OleDbConnection Connection=CreateConnection(@“C:\userinfo.xls”))
{
Connection.Open();
OleDbCommand tempCmd=Connection.CreateCommand();
tempCmd.CommandText=CreateTableQury(dt,“Sheet1”);
tempCmd.ExecuteNonQuery();
tempCmd.CommandText=CreateInsertQuery(dt,tempCmd.Parameters,“Sheet1”);
int extime=1;
foreach(数据行中的数据行)
{
对于(int t=0;t
它可能是您在2003年打开的版本。因为当您在2007年打开2003 excel时,它的行数不会超过65K


因此,请将excel保存到2007年,然后再试一次。

我猜您必须将excel升级到至少2007版或跨列扩展,然后该文件似乎不适用于2007,userinfo。
**xls**
此外,我认为您需要升级
Microsoft.Jet.OLEDB
alsohm。。我有微软Office 2007。。我想我是否有微软的Office excel程序并不重要(如果我使用Micocoft.Office.Interop.excel,我想这很重要),我不明白你的意思?您使用的xls格式适用于具有65K限制的旧版本Excel