C# 使用oledb在同一excel工作表上写入多个表
我正在用创建excel文件,由于xml属性和文件类型电子表格,它的文件变得太大,大约250mb。 我无法使用,因为用户不想在服务器上设置office 或第三部分dll。 现在我想,我应该使用Oledb来创建excel文件。 我的问题是我不能用oledb在同一张纸上写多张表 错误: 条件表达式中的数据类型不匹配 我的代码: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
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