把Excel导入数据库 各位大侠请教一下。把Excel导入数据库时,Excel中只有一个film工作表,但是通过OleDbConnection读取的时候确有两个,一个是film,另一个是film$,请教这个两个工作表的异同。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0" ;DataSet ds= new DataSet();using(OleDbConnection conn= new OleDbConnection(strCon)){string strCom = " SELECT * FROM [Sheet1$]" ;conn.Open() ;OleDbDataAdapter myCommand = new OleDbDataAdapter(str , conn) ;myCommand.Fill(ds) ;conn.Close() ;} sheet1$为Excel文件的工作表名,一般要加上$才能正常使用. sheet1$和sheet1两个工作表有什么区别? public static DataSet ImportExcel(string file) { System.IO.FileInfo fileInfo = new FileInfo(file); if (!fileInfo.Exists) return null; string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'"; OleDbConnection objConn = new OleDbConnection(strConn); DataSet dsExcel = new DataSet(); try { objConn.Open(); string strSql = "select * from [sheet1$]"; OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn); odbcExcelDataAdapter.Fill(dsExcel); return dsExcel; } catch (Exception ex) { throw ex; } finally { objConn.Close(); } }工作表的名字后面必须跟上$ 你有指定读取工作表名称吗?就像这样,如果这样读取的应该只有一个的。string strCom = " SELECT * FROM [Sheet1$]" ; 带$的是有效的表名有两个表名的原因在于你用了oledb时调用了GetOleDbSchemaTable()方法改方法有个问题就是检索表名的同时还会输出该表一个表的区域名如果你用mssql2005的dts导入excel也会有相同现象发生 SELECT * into FROM OpenDataSource('MICROSOFT.JET.OLEDB.4.0','User ID=Admin;Password=;Data Source=你的Execl路径;Extended Properties=''Excel 8.0;IMEX=1''')...Execl工作区间名$ Excel sheet表名动态读取。 DataTable _Table = GetExcelTableName(@"C:\1.xls"); for (int i = 0; i != _Table.Rows.Count; i++) { MessageBox.Show(_Table.Rows[i]["Table_Name"].ToString()); }具体方法/// <summary> /// 获取EXCEL的表 表名字列 /// </summary> /// <param name="p_ExcelFile">Excel文件</param> /// <returns>数据表</returns> public static DataTable GetExcelTableName(string p_ExcelFile) { try { if (System.IO.File.Exists(p_ExcelFile)) { OleDbConnection _ExcelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + p_ExcelFile); _ExcelConn.Open(); DataTable _Table = _ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); _ExcelConn.Close(); return _Table; } return null; } catch { return null; } } 楼上大牛们说的很好,我给你一个牛人的博客http://blog.csdn.net/zjcxc/category/125588.aspx /// <summary> /// 导出EXCEL表中的数据到 myDataSet /// </summary> public static DataSet GetConnect(string PathName, DataSet myDataSet) { //创建一个数据链接 // string strCon = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = {0};Extended Properties=Excel 8.0", path); string strCon =string .Format ( "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= {0} ;Extended Properties='Excel 8.0;HDR=YES;IMEX=1';",PathName ); OleDbConnection myConn = new OleDbConnection(strCon); //条件查询EXCEL表 string strCom = " SELECT * FROM [Sheet1$] "; myConn.Open(); //打开数据链接,得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn); //创建一个 DataSet对象 myDataSet = new DataSet(); //得到自己的DataSet对象 myCommand.Fill(myDataSet, "[Sheet1$]"); //关闭此数据链接 myConn.Close(); return myDataSet; } 求助谁用过ymPrompt.win 如何获取二维数组中的某一维数据 WinForm小问题请教 如何进入呀,请指定江山 刷新的问题 如何在C#中使用API(WritePrivateProfileString)向UTF-8的Ini文件中写入正确的值 搞不懂了,大家来看看! 怎么显示当前按钮的Text内容? 请问VS2010中有能生成存放图标的控件吗??? 请问如何得到右键菜单是哪个对象引发的?谢过了先。 学习c#遇到的问题 winform怎么实现登陆一个网站并抓取这个网站的数据
DataSet ds= new DataSet();
using(OleDbConnection conn= new OleDbConnection(strCon))
{
string strCom = " SELECT * FROM [Sheet1$]" ;
conn.Open() ;
OleDbDataAdapter myCommand = new OleDbDataAdapter(str , conn) ;
myCommand.Fill(ds) ;
conn.Close() ;
}
public static DataSet ImportExcel(string file)
{
System.IO.FileInfo fileInfo = new FileInfo(file);
if (!fileInfo.Exists)
return null; string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection objConn = new OleDbConnection(strConn);
DataSet dsExcel = new DataSet();
try
{
objConn.Open();
string strSql = "select * from [sheet1$]";
OleDbDataAdapter odbcExcelDataAdapter = new OleDbDataAdapter(strSql, objConn);
odbcExcelDataAdapter.Fill(dsExcel);
return dsExcel;
}
catch (Exception ex)
{
throw ex;
}
finally
{
objConn.Close();
}
}
工作表的名字后面必须跟上$
就像这样,如果这样读取的应该只有一个的。
string strCom = " SELECT * FROM [Sheet1$]" ;
带$的是有效的表名有两个表名的原因在于你用了oledb时调用了GetOleDbSchemaTable()方法
改方法有个问题就是检索表名的同时还会输出该表一个表的区域名如果你用mssql2005的dts导入excel也会有相同现象发生
for (int i = 0; i != _Table.Rows.Count; i++)
{
MessageBox.Show(_Table.Rows[i]["Table_Name"].ToString());
}具体方法/// <summary>
/// 获取EXCEL的表 表名字列
/// </summary>
/// <param name="p_ExcelFile">Excel文件</param>
/// <returns>数据表</returns>
public static DataTable GetExcelTableName(string p_ExcelFile)
{
try
{
if (System.IO.File.Exists(p_ExcelFile))
{
OleDbConnection _ExcelConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + p_ExcelFile);
_ExcelConn.Open();
DataTable _Table = _ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
_ExcelConn.Close();
return _Table;
}
return null;
}
catch
{
return null;
}
}
/// <summary>
/// 导出EXCEL表中的数据到 myDataSet
/// </summary>
public static DataSet GetConnect(string PathName, DataSet myDataSet)
{
//创建一个数据链接
// string strCon = string.Format(" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = {0};Extended Properties=Excel 8.0", path);
string strCon =string .Format ( "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= {0} ;Extended Properties='Excel 8.0;HDR=YES;IMEX=1';",PathName );
OleDbConnection myConn = new OleDbConnection(strCon);
//条件查询EXCEL表
string strCom = " SELECT * FROM [Sheet1$] ";
myConn.Open();
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
//创建一个 DataSet对象
myDataSet = new DataSet();
//得到自己的DataSet对象
myCommand.Fill(myDataSet, "[Sheet1$]");
//关闭此数据链接
myConn.Close();
return myDataSet;
}