读书人

关于excel导入sql数据库的有关问题

发布时间: 2012-04-07 17:31:50 作者: rapoo

关于excel导入sql数据库的问题
public DataSet ImportFromExcel(string filePath)
{
DataSet ds = new DataSet();
string connString = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
DataTable table = OleDbHelper.GetExcelTables(connString);
if(table == null || table.Rows.Count <= 0)
{
return null;
}

foreach(DataRow dr in table.Rows)
{
string cmdText = "select * from [" + dr["TABLE_NAME"].ToString() + "]";
DataTable dt = OleDbHelper.FillDataTable(connString, cmdText);
dt.TableName = dr["TABLE_NAME"].ToString();
ds.Tables.Add(dt);
}

return ds;
}
网上大家给的代码一半以上都是和这相似的,我想问的是这里连接字符串中数据库类型是ACCESS,但数据源文件是excel文件这能直接查询操作吗,这样不是将excel文件当数据库文件操作了吗,这是我的理解,求高手讲解,另外我想将excel文件导入到sqlserver 2005中应该怎样修改这段代码呢??



[解决办法]

C# code
public static DataTable CreateExcelDataSource(string url)        {            DataTable dt = null;            string connetionStr = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + url + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";            string strSql = "select * from [Sheet1$]";            OleDbConnection oleConn = new OleDbConnection(connetionStr);            OleDbDataAdapter oleAdapter = new OleDbDataAdapter(strSql, connetionStr);            try            {                dt = new DataTable();                 oleAdapter.Fill(dt);                return dt;            }            catch (Exception ex)            {                throw ex;            }            finally            {                oleAdapter.Dispose();                oleConn.Close();                oleConn.Dispose();            }        }
[解决办法]
楼主的代码好非主流。。。
顶楼上的,只是楼上没考虑到excel表中第一张表名,不一定为sheet
[解决办法]
这个是我代码使用是成功的,给你了,有问题我们在联系 ,qq497950652

public DataSet ExcelToDS(string filePath, string tableName)
{
// string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
//"HDR=Yes;" 这个参数说明第一行是列名,而不是数据. "HDR=No;"正好与前面的相反。
//"IMEX=1;" 告诉driver总是把数据作为text 类型.注意,这选项会影响excel的写访问(sheet write access negative)。

string fileExtension = Path.GetExtension(filePath);
String strConn="";
if (fileExtension.ToLower() == ".xls")
strConn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
else if (fileExtension.ToLower() == ".xlsx")
strConn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= " + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES; IMEX=1\"";
else if (fileExtension.ToLower() == ".xlsb")
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES ; IMEX=1\"";
else if (fileExtension.ToLower() == ".xlsm")
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Macro;HDR=YES; IMEX=1\"";

OleDbConnection conn = new OleDbConnection(strConn);

string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
try
{
strExcel = string.Format("select * from [{0}$]", tableName);


myCommand = new OleDbDataAdapter(strExcel, strConn);
}
catch {

strExcel = string.Format("select * from [{0}$]", "Sheet1");
myCommand = new OleDbDataAdapter(strExcel, strConn);
}
try
{
ds = new DataSet();
myCommand.Fill(ds, "table1");
}
catch {
strExcel = string.Format("select * from [{0}$]", "Sheet1");
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1");
}
return ds;
}

读书人网 >C#

热点推荐