oldbcommand create tableName (有82个列)
sql执行的时候 会出字段定义错误
当减到42的时候,执行同过.
如果82列的时候 该怎么处理?
情景是这样:
GirdView中数据关联了82列(当然很多是空的,非必须)
现在是要将数据导入到excel,在创建excel表列的时候(当要创建84列的时候,执行语句出错)
列数在SQL SERVER的要求之内,42和82应该都可以的
你先试试 EXCEL文件是否能通过SQL管理器导入数据库,看看是不是EXCEL本身的问题
或者在构建字段时,加上 方括号
可能我问题没说明白
这里创建表是操作的excel表
就是动态在空的excel表中要创建82个列
现在问题是当列有82列的时候. oledb 执行语句的时候会报字段定义错误.缩减到42列的时候执行会通过
excel 是2003的版本 是不是版本不支持的问题,其他的导入导出都没问题.就是当列数过大的时候出错.
@cdit: excel 最大可以到256列哦
按你的程序:
多一列导出就报错吗,一定是在42列内吗?
还有你可以这样试试:
你可以把 create table 和 其中一条 insert into table 的SQL 语句 复制一下,
在SQL SERVER 里面 测试执行一行,看看 语句 有没有语法问题
@Yu: create table 列 是根据传进来的datatable自动生成的,在创建语句的时候,我只是做了一个终止循环大于40的时候就跳过去没生成列了,具体到多少列没仔细弄过,生成SQL语句应该不会错,都是自动生成。在导入导出列没那么大的datatable的时候生成EXCEL数据都是成功的。等明天上班,我在弄具体的代码。问题确定不是语句的问题,都是自动生成的语句,SQL语句都可以通过。非常感谢您的回答。早点休息!
建议实用NPOI组件,来导入导出数据,比较简单
//IWorkbook wk = new HSSFWorkbook(); //写03的xls IWorkbook wk = new XSSFWorkbook(); //写07之后xlsx ISheet sheet = wk.CreateSheet("A1"); IRow row1 = sheet.CreateRow(0); for (int i = 0; i < 10; i++) { row1.CreateCell(i).SetCellValue("create"+i); } IRow row2 = sheet.CreateRow(1); for (int i = 0; i < 8; i++) { row2.CreateCell(i).SetCellValue("delete" + i); } using (FileStream fs=File.OpenWrite("1213.xlsx")) { //03的保存文件的后缀名 修改一下 wk.Write(fs); MessageBox.Show("ok"); }
建议逐个减少列测试,确定准确的错误信息。
支持使用NPOI,轻量级的
上面这个方法,当表中的列数大到一定程度, 会报字段定义错误(具体多少列没仔细侧过)
1 private void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName) 2 { 3 if (tmpDataTable == null) 4 { 5 return; 6 } 7 int rowNum = tmpDataTable.Rows.Count; 8 int columnNum = tmpDataTable.Columns.Count; 9 int rowIndex = 1; 10 int columnIndex = 0; 11 12 Excel.Application xlApp = new Excel.ApplicationClass(); 13 14 xlApp.DefaultFilePath = ""; 15 xlApp.DisplayAlerts = true; 16 xlApp.SheetsInNewWorkbook = 1; 17 18 Excel.Workbook xlBook = xlApp.Workbooks.Add(true); 19 20 //将DataTable的列名导入Excel表第一行 21 foreach (DataColumn dc in tmpDataTable.Columns) 22 { 23 columnIndex++; 24 xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName; 25 } 26 27 //将DataTable中的数据导入Excel中 28 for (int i = 0; i < rowNum; i++) 29 { 30 rowIndex++; 31 columnIndex = 0; 32 for (int j = 0; j < columnNum; j++) 33 { 34 columnIndex++; 35 xlApp.Cells[rowIndex, columnIndex] = "'"+tmpDataTable.Rows[i][j].ToString(); 36 } 37 } 38 xlBook.SaveCopyAs(strFileName); 39 }
这个代码解决了列数多的问题。
就是第一个方法 不知道原因,当列数多大一定程度,为什么会出错