Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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# 使用oledb在同一excel工作表上写入多个表_C#_Excel_Oledb - Fatal编程技术网

C# 使用oledb在同一excel工作表上写入多个表

C# 使用oledb在同一excel工作表上写入多个表,c#,excel,oledb,C#,Excel,Oledb,我正在用创建excel文件,由于xml属性和文件类型电子表格,它的文件变得太大,大约250mb。 我无法使用,因为用户不想在服务器上设置office 或第三部分dll。 现在我想,我应该使用Oledb来创建excel文件。 我的问题是我不能用oledb在同一张纸上写多张表 错误: 条件表达式中的数据类型不匹配 我的代码: connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extende

我正在用创建excel文件,由于xml属性和文件类型电子表格,它的文件变得太大,大约250mb。 我无法使用,因为用户不想在服务器上设置office 或第三部分dll。 现在我想,我应该使用Oledb来创建excel文件。 我的问题是我不能用oledb在同一张纸上写多张表

错误:

条件表达式中的数据类型不匹配

我的代码:

           connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'";
           connectionString = string.Format(connectionString, outputFile, "YES");

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();


                foreach (var item in dataSetList)
                {
                    DataSet data = (DataSet)item.Value;
                    // creates the excel sheet



                    //DataSet data = item.Keys
                    //Iterate the tables in the dataset.
                    //Each table will become a tab or sheet in the workbook.
                    int maxcount = 0;
                    for (int kl = data.Tables.Count-1; kl >=0; kl--)
                    {
                        DataTable dt = data.Tables[kl];
                        string sheetSql1 = "";
                        if (dt.Columns.Count > maxcount)
                            maxcount = dt.Columns.Count;

                        var tableSchemaName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        if (tableSchemaName.Select("TABLE_NAME='" + data.DataSetName + "$'").Length == 0)
                        {
                            sheetSql1 = "CREATE TABLE [" + data.DataSetName + "] (";
                            if (dt.Columns.Count > 0)
                            {
                                //if (!dt.Columns[0].ColumnName.StartsWith("somespecificcaption"))
                                //{
                                for (int i = 0; i < dt.Columns.Count; i++)
                                {
                                    string dataType;


                                    //Set appropriate styling of each cell based on datatype
                                    //This depends on how sql server ends up reporting the datatype.
                                    switch (dt.Columns[i].DataType.ToString()) 
                                    {
                                        case "System.DateTime":

                                            dataType = "DateTime";

                                            break;
                                        case "System.Decimal":
                                        case "System.Double":
                                        case "System.Int16":
                                        case "System.Int32":
                                        case "System.Int64":
                                        case "System.Byte":
                                            dataType = "int";

                                            break;
                                        default:
                                            dataType = "varchar(100)";

                                            break;
                                    }
                                    sheetSql1 += "F" + i.ToString() + " " + dataType + ",";
                                    //sheetSql1 += dt.Columns[i].ColumnName + " varchar(50),";

                                }
                                sheetSql1 = sheetSql1.Remove(sheetSql1.Length - 1);
                                sheetSql1 += ")";
                                using (OleDbCommand cmd = new OleDbCommand(sheetSql1, conn))
                                {
                                    cmd.ExecuteNonQuery();
                                }
                                //}
                            }
                        }
                        // Write out row data
                        foreach (DataRow dr in dt.Rows)
                        {
                            string fields = "";
                            string values = "";
                            // now add records into the excel sheet just created
                            sheetSql1 = "INSERT INTO [" + data.DataSetName + "]";
                            for (int j = 0; j < maxcount; j++)
                            {
                                //fields += dt.Columns[j].ColumnName + ",";
                                //values += "@" + dt.Columns[j].ColumnName + ",";
                                fields += "F" + j.ToString() + ",";
                                values += "@F" + j.ToString() + ",";
                            }
                            fields = fields.Remove(fields.Length - 1);
                            values = values.Remove(values.Length - 1);
                            sheetSql1 += "(" + fields + ") VALUES(" + values + ")";
                            using (OleDbCommand cmd = new OleDbCommand(sheetSql1, conn))
                            {
                                for (int k = 0; k < maxcount; k++)
                                {

                                    string output;

                                    //Set appropriate styling of each cell based on datatype
                                    //This depends on how sql server ends up reporting the datatype.
                                    if (k < dt.Columns.Count)
                                    {
                                        switch (dt.Columns[k].DataType.ToString()) // FormatException murat data types
                                        {
                                            case "System.DateTime":
                                                try
                                                {

                                                    output = DateTime.Parse(dr[k].ToString()).ToString("dd/MM/yyyy");
                                                }
                                                catch (FormatException fe) //date is null or empty in dataset
                                                {
                                                    output = "";
                                                }

                                                break;
                                            case "System.Decimal":
                                            case "System.Double":
                                            case "System.Int16":
                                            case "System.Int32":
                                            case "System.Int64":
                                            case "System.Byte":

                                                output = dr[k].ToString().Trim();
                                                break;
                                            default:

                                                output = dr[k].ToString().Trim();
                                                break;
                                        }
                                    }
                                    else
                                        output = "0";
                                    //  cmd.Parameters.AddWithValue("@" + dt.Columns[k].ColumnName, dr[k]);

                                        cmd.Parameters.AddWithValue("@F" + k.ToString(), output);



                                }
                                cmd.ExecuteNonQuery();
                            }
                        }
                    }

                }

                conn.Close();
            }
connectionString=“Provider=Microsoft.ACE.OLEDB.12.0;数据源={0};扩展属性='excel8.0;HDR={1}';
connectionString=string.Format(connectionString,outputFile,“YES”);
使用(OLEDB连接连接=新OLEDB连接(连接字符串))
{
conn.Open();
foreach(数据集列表中的变量项)
{
数据集数据=(数据集)item.Value;
//创建excel工作表
//数据集数据=item.Keys
//迭代数据集中的表。
//每个表都将成为工作簿中的选项卡或工作表。
int maxcount=0;
对于(int-kl=data.Tables.Count-1;kl>=0;kl--)
{
DataTable dt=数据表[kl];
字符串sheetSql1=“”;
如果(dt.Columns.Count>maxcount)
maxcount=dt.Columns.Count;
var tableSchemaName=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
if(tableSchemaName.Select(“TABLE_NAME='”+data.DataSetName+“$”))。长度==0)
{
sheetSql1=“创建表[”+data.DataSetName+”](”;
如果(dt.Columns.Count>0)
{
//如果(!dt.Columns[0].ColumnName.StartWith(“somespecificcaption”))
//{
对于(int i=0;i