首页 新闻 搜索 专区 学院

oldbcommand 操作excel

0
悬赏园豆:200 [已关闭问题] 关闭于 2013-11-04 17:33

oldbcommand  create tableName (有82个列)

sql执行的时候 会出字段定义错误

当减到42的时候,执行同过.

如果82列的时候 该怎么处理?

情景是这样:

  GirdView中数据关联了82列(当然很多是空的,非必须)

  现在是要将数据导入到excel,在创建excel表列的时候(当要创建84列的时候,执行语句出错)

cdit的主页 cdit | 初学一级 | 园豆:14
提问于:2013-11-03 18:43
< >
分享
所有回答(5)
0

列数在SQL SERVER的要求之内,42和82应该都可以的

你先试试 EXCEL文件是否能通过SQL管理器导入数据库,看看是不是EXCEL本身的问题

 

或者在构建字段时,加上 方括号

Yu | 园豆:12980 (专家六级) | 2013-11-03 18:53

可能我问题没说明白

这里创建表是操作的excel表

就是动态在空的excel表中要创建82个列

现在问题是当列有82列的时候.  oledb 执行语句的时候会报字段定义错误.缩减到42列的时候执行会通过

excel 是2003的版本 是不是版本不支持的问题,其他的导入导出都没问题.就是当列数过大的时候出错.

支持(0) 反对(0) cdit | 园豆:14 (初学一级) | 2013-11-03 19:30

@cdit: excel 最大可以到256列哦

按你的程序:

多一列导出就报错吗,一定是在42列内吗?

 

还有你可以这样试试:

你可以把 create table 和 其中一条 insert into table 的SQL 语句 复制一下,

在SQL SERVER 里面 测试执行一行,看看 语句 有没有语法问题

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-11-03 21:37

@Yu: create table 列 是根据传进来的datatable自动生成的,在创建语句的时候,我只是做了一个终止循环大于40的时候就跳过去没生成列了,具体到多少列没仔细弄过,生成SQL语句应该不会错,都是自动生成。在导入导出列没那么大的datatable的时候生成EXCEL数据都是成功的。等明天上班,我在弄具体的代码。问题确定不是语句的问题,都是自动生成的语句,SQL语句都可以通过。非常感谢您的回答。早点休息!

支持(0) 反对(0) cdit | 园豆:14 (初学一级) | 2013-11-03 22:43
0

建议实用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");
            }
秋壶冰月 | 园豆:5692 (大侠五级) | 2013-11-03 21:43
0

建议逐个减少列测试,确定准确的错误信息。

幻天芒 | 园豆:36910 (高人七级) | 2013-11-03 22:30
0

支持使用NPOI,轻量级的

平常心队长 | 园豆:1113 (小虾三级) | 2013-11-04 09:45
0
View Code

上面这个方法,当表中的列数大到一定程度, 会报字段定义错误(具体多少列没仔细侧过)

 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     }
View Code

这个代码解决了列数多的问题。

 

就是第一个方法 不知道原因,当列数多大一定程度,为什么会出错

cdit | 园豆:14 (初学一级) | 2013-11-04 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册