在上一次實驗中,嘗試了使用串連伺服器和即席查詢實現將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資料庫的連接字串。由於我的表是帶有自動標識的主鍵的,所以不添加第一列。
個人感覺這種方式還是比較簡單的,當然缺點是不夠靈活。
希望園內眾神冒出來批評指正。