using System; using System.Collections.Generic; using System.IO; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using BP.DA; using System.Data; using System.Data.Odbc; using System.Data.OleDb; using System.IO; using System.Text; namespace BP.Difference { public class DA_DbLoad { public static string GenerFirstTableName(string fileName) { return GenerTableNameByIndex(fileName, 0); } public static string GenerTableNameByIndex(string fileName, int index) { String[] excelSheets = GenerTableNames(fileName); if (excelSheets != null) return excelSheets[index]; if (excelSheets.Length < index) throw new Exception("err@table的索引号错误" + index + "最大索引号为:" + excelSheets.Length); return null; } public static string[] GenerTableNames(string fileName) { try { string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; if (fileName.ToLower().Contains(".xlsx")) strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; OleDbConnection con = new OleDbConnection(strConn); con.Open(); //计算出有多少个工作表sheet DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dt == null) return null; String[] excelSheets = new String[dt.Rows.Count]; for (int i = 0; i < dt.Rows.Count; i++) { excelSheets[i] = dt.Rows[i]["TABLE_NAME"].ToString(); } con.Close(); con.Dispose(); return excelSheets; } catch (Exception ex) { throw new Exception("读取文件期间出现错误:[" + fileName + "]" + ex.Message); } } /// /// 删除表中的空数据行 /// /// /// public static DataTable DeleteEmptyRows(DataTable dt) { List removelist = new List(); for (int i = 0; i < dt.Rows.Count; i++) { bool rowdataisnull = true; for (int j = 0; j < dt.Columns.Count; j++) { if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim())) { rowdataisnull = false; } } if (rowdataisnull) { removelist.Add(dt.Rows[i]); } } for (int i = 0; i < removelist.Count; i++) { dt.Rows.Remove(removelist[i]); } return dt; } public static DataTable ReadExcelFileToDataTableBySQL(string filePath, string tableName) { string sql = "SELECT * FROM [" + tableName + "]"; DataTable dt = new DataTable("dt"); string typ = System.IO.Path.GetExtension(filePath).ToLower(); string strConn; switch (typ.ToLower()) { case ".xls": if (sql == null) { sql = "SELECT * FROM [" + GenerFirstTableName(filePath) + "]"; } strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + filePath + ";Extended Properties=Excel 8.0"; System.Data.OleDb.OleDbConnection conn = new OleDbConnection(strConn); OleDbDataAdapter ada = new OleDbDataAdapter(sql, conn); try { conn.Open(); ada.Fill(dt); dt.TableName = Path.GetFileNameWithoutExtension(filePath); } catch (System.Exception ex) { conn.Close(); throw ex;//(ex.Message); } conn.Close(); break; case ".xlsx": if (sql == null) sql = "SELECT * FROM [" + GenerFirstTableName(filePath) + "]"; try { strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; System.Data.OleDb.OleDbConnection conn121 = new OleDbConnection(strConn); OleDbDataAdapter ada91 = new OleDbDataAdapter(sql, conn121); conn121.Open(); ada91.Fill(dt); dt.TableName = Path.GetFileNameWithoutExtension(filePath); conn121.Close(); ada91.Dispose(); } catch (System.Exception ex1) { try { strConn = "Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\""; System.Data.OleDb.OleDbConnection conn1215 = new OleDbConnection(strConn); OleDbDataAdapter ada919 = new OleDbDataAdapter(sql, conn1215); ada919.Fill(dt); dt.TableName = Path.GetFileNameWithoutExtension(filePath); ada919.Dispose(); conn1215.Close(); } catch { } throw ex1;//(ex.Message); } break; case ".dbf": strConn = "Driver={Microsoft dBASE Driver (*.DBF)};DBQ=" + System.IO.Path.GetDirectoryName(filePath) + "\\"; //+FilePath;// OdbcConnection conn1 = new OdbcConnection(strConn); OdbcDataAdapter ada1 = new OdbcDataAdapter(sql, conn1); conn1.Open(); try { ada1.Fill(dt); } catch//(System.Exception ex) { try { int sel = ada1.SelectCommand.CommandText.ToLower().IndexOf("select") + 6; int from = ada1.SelectCommand.CommandText.ToLower().IndexOf("from"); ada1.SelectCommand.CommandText = ada1.SelectCommand.CommandText.Remove(sel, from - sel); ada1.SelectCommand.CommandText = ada1.SelectCommand.CommandText.Insert(sel, " top 10 * "); ada1.Fill(dt); dt.TableName = "error"; } catch (System.Exception ex) { conn1.Close(); throw new Exception("读取DBF数据失败!" + ex.Message + " SQL:" + sql); } } conn1.Close(); break; default: break; } return DeleteEmptyRows(dt); } } }