C# 从Excel2003将数据导入到SQL2005,数据发生截断的问题分析

问题描述:大家没有遇到过这种情况使用自己编写的工具读取Excel2003文件中的数据,然后执行插入语句将数据批量导入到SQL2005.

一定有人遇到过数据截断的情况,大多数的原因是因为,数据库中的字段设置的太小导致的,只要稍微修改下就能解决。

但是下面的情况发生的原因是在读取Excel2003文件中的数据式,发生的读取数据截断,这种情况该怎么解决呢?

首先屡一下导入数据的思路,

将Excel2003加载到DataTable,或者你直接使用DataReader一行一行的从Excel2003问价中读取,读取一条插入一条

然后直接你的SQL语句导入;这样基本就ok了!

读取Excel2003文件的核心代码如下

我们采用两种方式 DataTable的方式和DataReader的方式

 public class Conmmon
{
/// <summary>
/// 读取excel文件获得DataTable
/// </summary>
/// <param name="strExcelFileName">目标Excel文件完全路径</param>
/// <param name="strSheetName">工作表的名字</param>
/// <returns></returns>
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
string strExcel = "select * from [" + strSheetName + "$]"; DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);
return ds.Tables[strSheetName];
}
}
/// <summary>
/// 读取excel文件获得DataReader
/// </summary>
/// <param name="strExcelFileName"></param>
/// <param name="strSheetName"></param>
/// <returns></returns>
public static OleDbDataReader ExcelToDataReader(string strExcelFileName, string strSheetName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;IMEX=1';";
//string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';"; string strExcel = "select * from [" + strSheetName + "$]";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand cmd = new OleDbCommand(strExcel, conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
catch (System.Data.OleDb.OleDbException e)
{
throw new Exception(e.Message);
}
}
}

ok!如果代码有什么问题,请大家指出来!

下面我们开始使用上面的代码输出一下“测试数据文件.xls”文件中的内容【在下面下载和源代码一起】

//使用DataTable的方式
private void btnTest_Click(object sender, EventArgs e)
{
DataTable myT = Conmmon.ExcelToDataTable(this.txtExcel.Text, "Content");
object obj = null;
foreach (DataRow myrow in myT.Rows)
{
obj = myrow["qvod"];
txtResult.AppendText(obj.ToString() + "\n");
}
}

ok !
我们看一下测试的结果

通用使用DataReader也是同样的结果哦,大家有可以下载我下面的 【源码包】 自行测试哦

嘿嘿!不要以为就这样完了!

好戏才刚刚开始!

我们将刚刚的第14行数据!复制一下,粘贴在第一行,【可以查看"测试数据2.xls"】

我们在重复上面的步骤 显示输出一下

至此问题描述完毕!原因我还没有找到,如果代码没有问题话那就是 数据驱动程序了问题了 瞎猜了,

我调试过程序,14行数据其实是完全读取了,但是放在循环语句中就不行了,

那么是Excel2003文件的问题吗?  我设置单元格格式 为 文本 也没有效果

希望能有高手协助,也许原因就是很小的一个地方引起的。我已经在园子内提问了,但是还没有找到方法。

附上源代码和测试数据

http://files.cnblogs.com/Sky-cloudless/DemoExcel.rar

 
 
分类: C#

C# 从Excel2003将数据导入到SQL2005,数据发生截断的问题分析的更多相关文章

  1. Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具 ...

  2. mysql数据导入导出与数据表优化

    一.数据导入 mysqlimport -uroot oa d:/aa.txt --fields-terminated-by=, --fields-optionally-enclosed-by= --l ...

  3. KUDU数据导入尝试一:TextFile数据导入Hive,Hive数据导入KUDU

    背景 SQLSERVER数据库中单表数据几十亿,分区方案也已经无法查询出结果.故:采用导出功能,导出数据到Text文本(文本>40G)中. 因上原因,所以本次的实验样本为:[数据量:61w条,文 ...

  4. Hive数据导入HBase引起数据膨胀引发的思考

    最近朋友公司在做一些数据的迁移,主要是将一些Hive处理之后的热数据导入到HBase中,但是遇到了一个很奇怪的问题:同样的数据到了HBase中,所占空间竟增长了好几倍!详谈中,笔者建议朋友至少从几点原 ...

  5. 大数据入门到精通19--mysql 数据导入到hive数据中

    一.正常按照数据库和表导入 \\前面介绍了通过底层文件得形式导入到hive的表中,或者直接导入到hdfs中,\\现在介绍通过hive的database和table命令来从上层操作.sqoop impo ...

  6. pl/sql 如何将Excel文件数据导入oracle的数据表?

    1.准备导入数据的excel文件 注意:excel列名和数据表列名必须相同,excel文件sheet2和sheet3可以删除 1)excel文件格式 2)数据表格式 2.打开pl/sql ,找到工具- ...

  7. GridView数据导入Excel/Excel数据读入GridView

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] 效果图: 解决方案:页面增加一个按钮,单击事件添加如下方法:protected void Button1_Clic ...

  8. oracle数据导入/导出

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份.   大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据 ...

  9. Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012

    (注:注释的颜色原本为绿色,在这里变为黑色,有点不便,但不会造成阅读影响.放入Visual Basic2012代码编辑器后会还原成绿色.) 摘  要:DataGridView控件作为数据传输的中介,只 ...

随机推荐

  1. python_random随机

    在数据清洗,评估 ,抽验等等过程中,经常有这样的应用场景 : 需要在一个大的数据集合中随机出来样本,进行人工评估.为了保证足够随机,借助脚本来实现. 下面一个脚本  ,用于应对这种应用场景. 使用方法 ...

  2. [CLR via C#]5.3 值类型的装箱和拆箱

    原文:[CLR via C#]5.3 值类型的装箱和拆箱 在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制. 下面总结了对值类型的一个实例进行装箱操作时内部发生的事: 1)在托管 ...

  3. OracleServiceORCL服务不见了怎么办

    用管理员身份运行命令提示符(CMD) 然后输入“oradim -new -sid orcl”即可

  4. .net mvc mssql easyui treegrid

    效果图 数据图   可以看到 这里是根据 MenuNo 来 分级别的,支持 无限极,第一级是 01 ,第二级就是 01XX ,第三级 就是 01XXOO.类似 id.pid ,Ztree 里面 也是这 ...

  5. ASP.NET MVC应用程序把文字写在图片上

    原文:ASP.NET MVC应用程序把文字写在图片上 Insus.NET实现这篇<MVC把随机产生的字符串转换为图片>http://www.cnblogs.com/insus/p/3624 ...

  6. STL源代码分析——STL算法sort排序算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...

  7. 我的MYSQL学习心得(十三)

    原文:我的MYSQL学习心得(十三) 我的MYSQL学习心得(十三) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...

  8. 大endian和little endian

    大endian和little endian      一般Intel处理器或X86平台是小端 ,只是有点老了摩托罗拉的处理器将采用大端,掌握一下小端序.     小端序一般指低地址存低字节.高地址存高 ...

  9. APUE学习笔记(1):APUE运行环境

    APUE全称<Advanced Programming in the UNIX Environment>(UNIX环境高级编程) 书中例子大都使用作者自己写的头文件,所以需要解决一下,还好 ...

  10. leetcode第12题--Integer to Roman

    Problem: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range ...