使用c#将Excel文件数据插入数据库表
本文关键字:插入 数据库 数据 文件 Excel 使用 | 更新日期: 2023-09-27 18:20:38
我正在开发一个web应用程序,该应用程序将使用asp.net c#中的FileUpload控件获取excel文件。现在,当点击提交按钮时,我想将excel数据插入到我的数据库表中。我在SQL Server中有数据库。数据库表的字段&excel文件是相同的。我想把excel的数据插入我的数据库表中。那么我该怎么做呢?
其他人在评论中提到使用Excel interop读取Excel文件,但对于可能有多个用户的web应用程序来说,这样做并不安全。
若要开始,请查看Excel Data Reader项目。我已经用它处理了好几次来自网络应用程序的Excel文件,它运行得很好。
您可以使用OLEDB类使用OleDbConnection中的Excel驱动程序直接从Excel文件中读取。获取数据表中的数据并将其保存到数据库中。
string connectString =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:''testit.xlsx;Extended Properties='"Excel 12.0 Xml;HDR=YES;IMEX=1;'"";
OleDbConnection conn = new OleDbConnection(connectString);
OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
DataTable dt = new DataTable();
da.Fill(dt);
// Save your datatable records to DB as you prefer.
我一直在测试NPOI,作为另一个第三方Excel解析库的替代品。
https://code.google.com/p/npoi/
到目前为止,它似乎运行得很好,并且有一个非常完整的功能集。当然,如果你所需要的只是非常基本的Excel数据读取(而不是写入),那么这里提到的其他DB连接风格的接口应该足够好用。
EDIT:添加示例代码
using( FileStream fs = new FileStream("file.xls", FileMode.Open, FileAccess.Read) )
{
HSSFWorkbook wb = new HSSFWorkbook(fs);
double value = wb.GetSheet("Sheet1").GetRow(1).GetCell(1).NumericCellValue;
// read other values as necessary.
}
尝试以下代码。也许它很粗糙,但它可以
string connectString =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:''data''exceltest.xlsx;Extended Properties='"Excel 12.0 Xml;HDR=YES;IMEX=1;'"";
OleDbConnection conn = new OleDbConnection(connectString);
OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Sheet1$]", conn);
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
SqlConnection sqlc = new SqlConnection(@"server=.'SQLEXPRESS;user id=sa;pwd=windows;database=exceltest");
sqlc.Open();
SqlCommand cmd = new SqlCommand("select * from table1", sqlc);
SqlDataAdapter sda = new SqlDataAdapter("select * from table1", sqlc);
sda.InsertCommand = new SqlCommand("insert into table1", sqlc);
DataTable dbset = new DataTable();
da.Fill(dbset);
SqlCommand cmdinsert = new SqlCommand();
cmdinsert.Connection = sqlc;
foreach (DataRow dsrc in dt.Rows)
{
string insertcommand = "insert into table1" + dbset.TableName + " ";
string cols = "";
string vals = "";
DataRow dr = dbset.NewRow();
foreach (DataColumn clm in dt.Columns)
{
dr[clm.ColumnName] = dsrc[clm.ColumnName].ToString(); ;
if (cols.Length > 0)
{
cols += ",[" + clm.ColumnName+"]";
}
else
{
cols = "["+clm.ColumnName+"]";
}
if (vals.Length > 0)
{
vals += "," + "'" + dsrc[clm.ColumnName].ToString() + "'";
}
else
{
vals = "'" + dsrc[clm.ColumnName].ToString() + "'";
}
}
insertcommand += "(" + cols + ") values("+vals+")";
cmdinsert.CommandText = insertcommand;
cmdinsert.ExecuteNonQuery();
insertcommand = "";
}
sqlc.Close();