做了一个将EXCEL表格内容导入数据库的功能,但是在运行时出了点问题。
在导入第一张表时成功了,然后将第二张表再导入,报出“由于将在索引、主关键字、或关系中创建重复的值,请求对表的改变没有成功”的错误,而且数据库的表中多了一行内容全是空的数据。但是第二张表和第一张表中没有重复内容,所以错误其实是,导入时将EXCEL中的空行当做数据多次导入时报错了。
可是为什么,会将空行当做数据呢?
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;'"; //各版本号很重要
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [sheet1$]", strConn);
DataTable dt = new DataTable();
da.Fill(dt);
我是将EXCEL中表格存入DataTable,再将DataTable打入数据库。
可是第一张表导入时,并没有将空行也导进去,所以问题是在第二张表。
原来问题在于,我的第二张表是第一张表复制过去,然后删改了其中的数据得到的,所以看上去为空行的内容,程序也认为它是有数据的存入了DataTable中。
我重新建了张EXCEL,一行行添加,再导入时就没有了空行的问题。然后我又多添加了几行数据再删除,又出现了空行数据。所以问题就是你所看到的空行并没有数据,但是程序认为是有数据的。
所以为了避免这种问题,只要判断下数据是否为空就好,为空则不进行添加。