做网站项目时,可能会遇到将excel文件中的数据导入至sql server数据库的需求,把excel也看作数据库,使用OleDb连接后读取数据然后写入用SqlClient连接的sql server数据库即可,技术上没有什么难度。
但是需要考虑的一个问题是,系统安装的环境一般是专用sql server服务器+web服务器+客户端,而excel文件往往在客户端导入,如果直接使用sql语句读取的话,由于sql在web服务器上运行,不能读取到客户端的excel地址,就会出错了。
既然知道了错误的原因,解决方案也就有了:
1、把客户端的excel上传至web服务器上某文件夹,注意要给该文件夹设置网络用户的“写入”权限;
2、使用OleDb+sql语句读取web服务器上的excel文件
3、将读取的数据写入到sql server 数据库
4、将web服务器上的临时excel删除
部分代码如下:
protected void btnInput_Click(object sender, EventArgs e)
{
if (File1.PostedFile.FileName.ToString() == "")
{
MessageBox.Show(this, "请添加Excel表格!");
return;
}
string filePath1 = File1.PostedFile.FileName.ToString();
string fileExe = File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf("."));//扩展名
if (fileExe != ".xls")
{
MessageBox.Show(this, "文件非Excel表格式!");
return;
}
else
{
//string filename = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf("//"));
//FileUpload1.PostedFile.SaveAs(Server.MapPath("fileupload//") + filename);//上传文件
//string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("fileupload//") + filename + ";Extended Properties=Excel 8.0";
//string sqlin = "SELECT * FROM [Sheet2$]";
//OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));
//OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);
//DataSet dsin = new DataSet();
//adapterin.Fill(dsin);
//DataTable dtin = dsin.Tables[0];//连接并读取excel数据
string fileName = this.File1.FileName.ToString().Trim();
FileInfo filePath = new FileInfo(this.Server.MapPath("./../../UpLoadFolder/Excel/").Trim() + fileName);
this.File1.SaveAs(filePath.ToString().Trim());
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filePath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open();
System.Data.DataTable schemaTable = myConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = schemaTable.Rows[0][2].ToString().Trim(new char[] { '$', '/'' });
OleDbDataAdapter adp = new OleDbDataAdapter("Select * from [" + tableName + "$]", myConn);
DataSet DataSet = new DataSet();
adp.Fill(DataSet);
DataTable DateTable = DataSet.Tables[0];
for (int i = 0; i < DateTable.Rows.Count; i++)
{
Sql_SaveFromExcel(DateTable.Rows[i][0].ToString(), DateTable.Rows[i][1].ToString(), DateTable.Rows[i][2].ToString());
}
myConn.Close();
File.Delete(filePath.ToString().Trim());
Response.Redirect(list_url);
}
}