如何导入Excel 页面是GV显示数据,怎么把Excel中的数据导入到GV,请高手指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://zhangbq168.blog.163.com/blog/static/2373530520080249454473/(转) string connStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = 'C:\Excel.xls';Extended Properties=Excel 8.0"; OleDbConnection cnnxls = new OleDbConnection(connStr); OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls); DataSet ds = new DataSet(); myDa.Fill(ds); DataTable dt = ds.Tables[0];代码中你就得到了C盘中Excel.xls文件中第一页的数据了...至于将DataTable绑定到GV中,楼主应该会的... /// <summary> /// 导入数据到GridView /// </summary> /// <param name="fileUpload">文件上传控件对象</param> /// <param name="filePath">要存放文件的服务器路径</param> /// <param name="gridview">目标GridView</param> /// <param name="keyColIndex">用于导入的主键列</param> /// <returns>返回没有导入的数据DataSet</returns> public static DataSet ExcelToGridView(FileUpload fileUpload, string filePath, GridView gridview, int keyColIndex, string strMsg) { string errMsg = string.Empty; DataSet ds = null ; try { if ( ! filePath.EndsWith("\")) { filePath += "\"; } string fileName = fileUpload.FileName.Replace(".xls", "") + "_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls"; string fullFileName = filePath + fileName; fileUpload.SaveAs(fullFileName); ds = ExcelToGridView(fullFileName, gridview, keyColIndex,errMsg); if ( errMsg != string.Empty) { errMsg += "将数据导入GridView失败." + errMsg ; }; } catch (Exception ex) { errMsg += "上传excel文件失败." ; } strMsg = errMsg; return ds ; } DataTable Excel_UserInfo = new DataTable();string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\""; string strExcel = "select * from [sheet1$]"; using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn)) { DataSet ds = new DataSet(); adaptor.Fill(ds); Excel_UserInfo = ds.Tables[0]; }Gridview绑定Excel_UserInfo 在用DataSet 添加到数据。 如:foreach (DataRow row in dataTable.Rows){//SQL语句数据拼接。//执行SQL} 遍历Excel_UserInfo 插入数据库。 既然可以显示了,就说明你得到了DataTable了...直接把DataTable中的值存入数据库就OK了啊..可以用存储过程,或者是循环DataTable中的DataRow,生成sql语句,放入IList<string>中,循环插入数据库就行了 完整全在这了<a href='http://blog.csdn.net/ajaxtop/article/details/6670449'>请查阅</a> /// <summary> /// 讀取EXCEL /// </summary> /// <param name="path">EXCEL文件的路徑</param> /// <returns></returns> public DataSet ReadExcel(string path) { DataSet ds = new DataSet(); string strMessage = ""; try { string strcon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + path + ";Extended Properties='Excel 8.0;HRD=no;IMEX=2;'"; OleDbConnection con = new OleDbConnection(strcon); con.Open(); string strSQL = "select * from [sheet1$]"; OleDbDataAdapter da = new OleDbDataAdapter(strSQL, con); int flag = da.Fill(ds, "excel"); con.Close(); return ds; } catch (Exception ex) { strMessage = "錯誤訊息:1.可能是要上傳的EXCEL在打開狀態。2.也可能是" + ex.ToString(); MessageAjaxHelper.showAlert(UpdatePanel1, strMessage); return ds; } }将返回的DataSet进行转换 :DataTable dt=ReadExcel(path);GridView1.DataSource=dt;GridView1.DataBound();写入数据库:string insertSQL="insert into TableName1(a,b,c) values(";然后遍历刚才的dt组合insert语句即可了。不过楼主要注意字段的合法性检测,如年龄要在10-100之间等。最后提醒 office2003和2007的读取字符串不同。我这个是2003格式的。子夜的那个是2007格式的。 对了 还要注意要用SQL的事务回滚来提交多条同样式的SQL语句,防止出错。 /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList">多条SQL语句</param> public static int ExecuteSqlTran(List<String> SQLStringList) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { int count = 0; for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n]; if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; count += cmd.ExecuteNonQuery(); } } tx.Commit(); return count; } catch(Exception ex) { tx.Rollback(); return 0; } } } treeView getTreeNode("0"); 出现“对象不支持此属性或方法” ASP.net 页面加载的问题 GridView无法显示 请问,有人用C#做过 B/S 的GIS吗?用什么工具呢? 请教:Hashtable组成新数据排序问题 web.config中compilation里的debug=false为什么结果不一样? 请问一个数据查询的问题? 诸位老大,一个功能较齐全的企业网站一般报价多少money? 在ASP.NET中如控制另一个页面的层.!!!!急急(请各位帮忙) 看不懂的sql语句 求高手,在线等,如何判断一个值是另一个值的一部分 网站打不开
string connStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = 'C:\Excel.xls';Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection(connStr);
OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
DataSet ds = new DataSet();
myDa.Fill(ds);
DataTable dt = ds.Tables[0];代码中你就得到了C盘中Excel.xls文件中第一页的数据了...
至于将DataTable绑定到GV中,楼主应该会的...
/// <summary>
/// 导入数据到GridView
/// </summary>
/// <param name="fileUpload">文件上传控件对象</param>
/// <param name="filePath">要存放文件的服务器路径</param>
/// <param name="gridview">目标GridView</param>
/// <param name="keyColIndex">用于导入的主键列</param>
/// <returns>返回没有导入的数据DataSet</returns>
public static DataSet ExcelToGridView(FileUpload fileUpload, string filePath, GridView gridview, int keyColIndex, string strMsg)
{
string errMsg = string.Empty;
DataSet ds = null ;
try
{
if ( ! filePath.EndsWith("\"))
{
filePath += "\";
}
string fileName = fileUpload.FileName.Replace(".xls", "") + "_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
string fullFileName = filePath + fileName;
fileUpload.SaveAs(fullFileName);
ds = ExcelToGridView(fullFileName, gridview, keyColIndex,errMsg);
if ( errMsg != string.Empty)
{
errMsg += "将数据导入GridView失败." + errMsg ;
};
}
catch (Exception ex)
{
errMsg += "上传excel文件失败." ;
}
strMsg = errMsg; return ds ;
}
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
string strExcel = "select * from [sheet1$]"; using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn))
{
DataSet ds = new DataSet();
adaptor.Fill(ds);
Excel_UserInfo = ds.Tables[0];
}
Gridview绑定Excel_UserInfo
DataSet 添加到数据。
如:
foreach (DataRow row in dataTable.Rows)
{
//SQL语句数据拼接。
//执行SQL
}
既然可以显示了,就说明你得到了DataTable了...
直接把DataTable中的值存入数据库就OK了啊..
可以用存储过程,或者是循环DataTable中的DataRow,生成sql语句,放入IList<string>中,循环插入数据库就行了
<a href='http://blog.csdn.net/ajaxtop/article/details/6670449'>请查阅</a>
/// 讀取EXCEL
/// </summary>
/// <param name="path">EXCEL文件的路徑</param>
/// <returns></returns>
public DataSet ReadExcel(string path)
{
DataSet ds = new DataSet();
string strMessage = "";
try
{
string strcon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + path + ";Extended Properties='Excel 8.0;HRD=no;IMEX=2;'";
OleDbConnection con = new OleDbConnection(strcon);
con.Open();
string strSQL = "select * from [sheet1$]";
OleDbDataAdapter da = new OleDbDataAdapter(strSQL, con);
int flag = da.Fill(ds, "excel");
con.Close();
return ds;
}
catch (Exception ex)
{
strMessage = "錯誤訊息:1.可能是要上傳的EXCEL在打開狀態。2.也可能是" + ex.ToString();
MessageAjaxHelper.showAlert(UpdatePanel1, strMessage);
return ds; }
}将返回的DataSet进行转换 :DataTable dt=ReadExcel(path);
GridView1.DataSource=dt;
GridView1.DataBound();
写入数据库:
string insertSQL="insert into TableName1(a,b,c) values(";
然后遍历刚才的dt组合insert语句即可了。不过楼主要注意字段的合法性检测,如年龄要在10-100之间等。最后提醒 office2003和2007的读取字符串不同。我这个是2003格式的。子夜的那个是2007格式的。
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static int ExecuteSqlTran(List<String> SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
int count = 0;
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n];
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
count += cmd.ExecuteNonQuery();
}
}
tx.Commit();
return count;
}
catch(Exception ex)
{
tx.Rollback();
return 0;
}
}
}