在上一次实验中,尝试了使用连接服务器和即席查询实现将Excel中的数据导入到SQL Server2005的数据库中。
但是俗话说得好,计划赶不上变化,这不,变化来了。
在进一步的尝试中发现,使用即席查询等方式,极有可能出现错误,要么是SQL Server2005中外围配置的即席查询设置没开,要么就是Excel表从外界被打开无法读取数据。
还有一点的是,Excel文件必须和数据库在一台机器上(个人是这样认为的,不知道有没有解决办法),我可以把Excel文件上传到WEB服务器上,然后在删掉,但是不能保证WEB服务器和数据库服务器是一台机器啊,这样就没有办法了。
那么只有换一种思路了,使用程序来实现吧。
其实思路很简单,使用dataset!!!
代码如下:
Code
public void Excel(string path)
{
string conStringExcel = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
string sql = "select * from [Sheet1$]";
DataSet oleds = new DataSet();
OleDbDataAdapter oleda = new OleDbDataAdapter(sql, conStringExcel);
oleda.Fill(oleds);
SqlConnection conn = new SqlConnection(connstring);
SqlDataAdapter sqlda = new SqlDataAdapter("select * from school where 1=2", conn);
SqlCommandBuilder sqlcb = new SqlCommandBuilder(sqlda);
DataSet sqlds = new DataSet();
sqlda.Fill(sqlds);
for (int i = 0; i < oleds.Tables[0].Rows.Count; i++)
{
sqlds.Tables[0].Rows.Add(sqlds.Tables[0].NewRow());
for (int j = 0; j < oleds.Tables[0].Columns.Count; j++)
{
sqlds.Tables[0].Rows[i][j + 1] = oleds.Tables[0].Rows[i][j];
}
}
sqlda.Update(sqlds, "table");
}
其中,方法的参数为Excel的文件路径。connstring是连接SQL Server数据库的连接字符串。由于我的表是带有自动标识的主键的,所以不添加第一列。
个人感觉这种方式还是比较简单的,当然缺点是不够灵活。
希望园内众神冒出来批评指正。