在此仅提供一种方法。
1、将Excel文件上传至服务器的指定目录内;
2、数据量较小且Sqlserver表中具有与Excel表字段一致或包含。
------------------------------------------------------------------------------
//准备基本参数。(1、读取Excel数据到DataSet中来,2、将DataSet中的数据一次性写入到SqlServer中。)
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +filepath+";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open ();
//以下语句中[sheet1$]是定义在Excel中的数据表名称,并且第一行需要包含列名,空行(特别是最后的空行),都需要删除,保证数据区域的方块性。
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";//两个数据表一定要具有相同的结构.特别是数据类型.如果personinfo表中存在数据,则先要执行删除.
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(strSQL,sqlConnection);
//建立适配器中Sql语句。
SqlCommandBuilder sqlCommandBuilder=new SqlCommandBuilder(sqlDataAdapter);
//生成接收数据的数据集.
DataSet sqlData=new DataSet();
sqlDataAdapter.Fill(sqlData);
//在内存中进行数据赋值
try
{
foreach(DataRow dr in ExcelDataSet.Tables[0].Rows)
{
DataRow r=sqlData.Tables[0].NewRow();//建立与表一致数据类型的行.
r["序号"]=dr["序号"];
r["单位"]=dr["单位"];
r["姓名"]=dr["姓名"];
r["身份证号码"]=dr["身份证号码"];
sqlData.Tables[0].Rows.Add(r);//将行加入到数据表中.
}
sqlDataAdapter.Update(sqlData);//执行适配器更新事件,将DataSet中的数据保存至后台SqlServer中.
}
catch(Exception exec)
{
msg.Text ="两个数据表的数据字段或类型不一致!"+exec.ToString();
return;
}