关于用C#实现Excel导入到数据库中解决办法
关于用C#实现Excel导入到数据库中
code=csharp]
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class pd_ribao : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
private DataSet CreateDataSource()
{
string strCon;
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";
OleDbConnection olecon = new OleDbConnection(strCon);
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
DataSet myds = new DataSet();
myda.Fill(myds);
return myds;
}
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}
[/code]
以上代码 怎么进行跟自己数据库绑定呢? 然后导入到数据中 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";中红色部分是什么意思? 求大神指导
------解决方案--------------------
所谓EXCEL导入数据库,其实是分为2步的
1.先把EXCEL的内容读取出来,放到一个数据集里
2.把数据集里的数据插入到数据库中
这两点研究明白了,你想怎么导,就怎么导
------解决方案--------------------
/// <summary>
/// 读取excel数据
/// </summary>
/// <param name="filename">文件路径 例如:C:\excel\test.xls</param>
/// <param name="worksheetname">工作簿名称 例如:[Sheet1$]</param>
/// <returns></returns>
public static System.Data.DataTable LoadExcelToDataTable(string filename, string worksheetname)
{
System.Data.DataTable table;
try
{
//连接字符串
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
OleDbConnection myConn = new OleDbConnection(sConnectionString);
string strCom = " SELECT * FROM [" + worksheetname + "]";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
table = new System.Data.DataTable();
myCommand.Fill(table);
myConn.Close();
return table;
}
catch (Exception ex)
{
return null;
}
}
传参数,执行上面的语句,返回table。剩下的就是将table内容插入数据库了,比如做个for循环,把table的每一条都拼成一条sql语句,并执行sql语句。
DataTable table = LoadExcelToDataTable("文件路径 例如:C:\excel\test.xls", "工作簿名称 例如:[Sheet1$]");
for (int i = 0; i < table.Rows.Count; i++)
{
string strSQL = "insert into [表名] (列名1,列名2,列名3) values('" + table.Rows[i][0].ToString() + "','" + table.Rows[i][1].ToString() + "','" + table.Rows[i][2].ToString() + "')";
SqlConnection conn = new SqlConnection("此处用你的链接字符串");
conn.Open();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = strSQL;
comm.ExecuteNonQuery();
conn.Close();
}
基本就这么个思路吧,随便写写,未经测试,不喜勿拍。
一楼说的对,这种方式得有office的数据连接组件,否则容易报出异常,例如报出如下提示
异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
code=csharp]
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class pd_ribao : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
private DataSet CreateDataSource()
{
string strCon;
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";
OleDbConnection olecon = new OleDbConnection(strCon);
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
DataSet myds = new DataSet();
myda.Fill(myds);
return myds;
}
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}
[/code]
以上代码 怎么进行跟自己数据库绑定呢? 然后导入到数据中 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("excel.xls") + "; Extended Properties=Excel 8.0;";中红色部分是什么意思? 求大神指导
------解决方案--------------------
所谓EXCEL导入数据库,其实是分为2步的
1.先把EXCEL的内容读取出来,放到一个数据集里
2.把数据集里的数据插入到数据库中
这两点研究明白了,你想怎么导,就怎么导
------解决方案--------------------
/// <summary>
/// 读取excel数据
/// </summary>
/// <param name="filename">文件路径 例如:C:\excel\test.xls</param>
/// <param name="worksheetname">工作簿名称 例如:[Sheet1$]</param>
/// <returns></returns>
public static System.Data.DataTable LoadExcelToDataTable(string filename, string worksheetname)
{
System.Data.DataTable table;
try
{
//连接字符串
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
OleDbConnection myConn = new OleDbConnection(sConnectionString);
string strCom = " SELECT * FROM [" + worksheetname + "]";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
table = new System.Data.DataTable();
myCommand.Fill(table);
myConn.Close();
return table;
}
catch (Exception ex)
{
return null;
}
}
传参数,执行上面的语句,返回table。剩下的就是将table内容插入数据库了,比如做个for循环,把table的每一条都拼成一条sql语句,并执行sql语句。
DataTable table = LoadExcelToDataTable("文件路径 例如:C:\excel\test.xls", "工作簿名称 例如:[Sheet1$]");
for (int i = 0; i < table.Rows.Count; i++)
{
string strSQL = "insert into [表名] (列名1,列名2,列名3) values('" + table.Rows[i][0].ToString() + "','" + table.Rows[i][1].ToString() + "','" + table.Rows[i][2].ToString() + "')";
SqlConnection conn = new SqlConnection("此处用你的链接字符串");
conn.Open();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = strSQL;
comm.ExecuteNonQuery();
conn.Close();
}
基本就这么个思路吧,随便写写,未经测试,不喜勿拍。
一楼说的对,这种方式得有office的数据连接组件,否则容易报出异常,例如报出如下提示
异常详细信息: System.InvalidOperationException: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。