在此僅提供一種方法。
1、將Excel文件上傳至服務(wù)器的指定目錄內(nèi);
2、數(shù)據(jù)量較小且Sqlserver表中具有與Excel表字段一致或包含。
------------------------------------------------------------------------------
//準(zhǔn)備基本參數(shù)。(1、讀取Excel數(shù)據(jù)到DataSet中來,2、將DataSet中的數(shù)據(jù)一次性寫入到SqlServer中。)
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +filepath+";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open ();
//以下語(yǔ)句中[sheet1$]是定義在Excel中的數(shù)據(jù)表名稱,并且第一行需要包含列名,空行(特別是最后的空行),都需要?jiǎng)h除,保證數(shù)據(jù)區(qū)域的方塊性。
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [sheet1$]", strConn);
DataSet ExcelDataSet = new DataSet();
myCommand.Fill(ExcelDataSet);
//建立寫SqlServer的連接。
strConn=System.Configuration.ConfigurationSettings.AppSettings["linktodata"].ToString();
SqlConnection sqlConnection=new SqlConnection(strConn);
string strSQL="select * from personinfo where 1=0";//兩個(gè)數(shù)據(jù)表一定要具有相同的結(jié)構(gòu).特別是數(shù)據(jù)類型.如果personinfo表中存在數(shù)據(jù),則先要執(zhí)行刪除.
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(strSQL,sqlConnection);
//建立適配器中Sql語(yǔ)句。
SqlCommandBuilder sqlCommandBuilder=new SqlCommandBuilder(sqlDataAdapter);
//生成接收數(shù)據(jù)的數(shù)據(jù)集.
DataSet sqlData=new DataSet();
sqlDataAdapter.Fill(sqlData);
//在內(nèi)存中進(jìn)行數(shù)據(jù)賦值
try
{
foreach(DataRow dr in ExcelDataSet.Tables[0].Rows)
{
DataRow r=sqlData.Tables[0].NewRow();//建立與表一致數(shù)據(jù)類型的行.
r["序號(hào)"]=dr["序號(hào)"];
r["單位"]=dr["單位"];
r["姓名"]=dr["姓名"];
r["身份證號(hào)碼"]=dr["身份證號(hào)碼"];
sqlData.Tables[0].Rows.Add(r);//將行加入到數(shù)據(jù)表中.
}
sqlDataAdapter.Update(sqlData);//執(zhí)行適配器更新事件,將DataSet中的數(shù)據(jù)保存至后臺(tái)SqlServer中.
}
catch(Exception exec)
{
msg.Text ="兩個(gè)數(shù)據(jù)表的數(shù)據(jù)字段或類型不一致!"+exec.ToString();
return;
}