net以execl做数据库_C#.NET Excel文件数据导入SQL Server数据库完整代码
展開全部
在日常的項目中,Excel,Word,txt等格式的數62616964757a686964616fe58685e5aeb931333337626235據導入到數據庫中是很常見
這里將分為.net導入Sql Server,Oracle數據庫和WinForm導入Sql Server,Oracle數據庫。
實現的基本思想:
1,先使用FileUpload控件fuload將Excel文件上傳到服務器上得某一個文件夾。
2,使用OleDb將已經上傳到服務器上的Excel文件讀出來,這里將Excel文件當做一個數據庫來讀。在聯系數據庫語句中,Data Source就是該文件在服務器上得物理路徑
3,將第二步中讀出的數據以DataTable對象返回。
4,遍歷DataTable對象,然后到Sql Server數據庫中查詢,是否存在該條數據。如果存在,可以做更新,或者不做處理;如果不存在,則插入數據。
注意:在遍歷DataTable的時候,可是使用dt.Rows[i]["Name"].ToString();Name為Name列的表頭,所以Excel中列的順序就無關緊要了。當然,前提是你知道Excel里列中各表頭的名字。如果Excel中列的順序固定,即可按下面代碼中的方式進行。
添加的引用:
using?System;
using?System.Data;
using?System.Data.OleDb;
using?System.Data.SqlClient;
using?System.IO;
using?System.Text;
using?System.Web;
using?System.Web.UI;
private?DataTable??xsldata()
{
if(fuload.FileName?==?"")
{
lbmsg.Text?=?"請選擇文件";
return?null;
}
string?fileExtenSion;
fileExtenSion?=?Path.GetExtension(fuload.FileName);
if(fileExtenSion.ToLower()?!=?".xls"?&&?fileExtenSion.ToLower()?!=?".xlsx")
{
lbmsg.Text?=?"上傳的文件格式不正確";
return?null;
}
try
{
string?FileName?=?"App_Data/"?+?Path.GetFileName(fuload.FileName);
if(File.Exists(Server.MapPath(FileName)))
{
File.Delete(Server.MapPath(FileName));
}
fuload.SaveAs(Server.MapPath(FileName));
//HDR=Yes,這代表第一行是標題,不做為數據使用?,如果用HDR=NO,則表示第一行不是標題,做為數據來使用。系統默認的是YES
string?connstr2003?=?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?Server.MapPath(FileName)?+?";Extended?Properties='Excel?8.0;HDR=Yes;IMEX=1;'";
string?connstr2007?=?"Provider=Microsoft.ACE.OLEDB.12.0;Data?Source="?+?Server.MapPath(FileName)?+?";Extended?Properties=\"Excel?12.0;HDR=YES\"";
OleDbConnection?conn;
if(fileExtenSion.ToLower()?==?".xls")
{
conn?=?new?OleDbConnection(connstr2003);
}
else
{
conn?=?new?OleDbConnection(connstr2007);
}
conn.Open();
string?sql?=?"select?*?from?[Sheet1$]";
OleDbCommand?cmd?=?new?OleDbCommand(sql,?conn);
DataTable?dt?=?new?DataTable();
OleDbDataReader?sdr?=?cmd.ExecuteReader();
dt.Load(sdr);
sdr.Close();
conn.Close();
//刪除服務器里上傳的文件
if(File.Exists(Server.MapPath(FileName)))
{
File.Delete(Server.MapPath(FileName));
}
return?dt;
}
catch(Exception?e)
{
return?null;
}
}
protected?void?Btn_Export_Excel_To_DB_Click(object?sender,?EventArgs?e)
{
try{
DataTable?dt?=?xsldata();
//dataGridView2.DataSource?=?ds.Tables[0];
int?errorcount?=?0;//記錄錯誤信息條數
int?insertcount?=?0;//記錄插入成功條數
int?updatecount?=?0;//記錄更新信息條數
string?strcon?=?"server=localhost;database=database1;uid=sa;pwd=sa";
SqlConnection?conn?=?new?SqlConnection(strcon);//鏈接數據庫
conn.Open();
for(int?i?=?0;?i?
{
string?Name?=?dt.Rows[i][0].ToString();//dt.Rows[i]["Name"].ToString();?"Name"即為Excel中Name列的表頭
string?Sex?=?dt.Rows[i][1].ToString();
int?Age?=?Convert.ToInt32(dt.Rows[i][2].ToString());
string?Address?=?dt.Rows[i][3].ToString();
if(Name?!=?""?&&?Sex?!=?""?&&?Age?!=?0?&&?Address?!=?"")
{
SqlCommand?selectcmd?=?new?SqlCommand("select?count(*)?from?users?where?Name='"?+?Name?+?"'?and?Sex='"?+?Sex?+?"'?and?Age='"?+?Age?+?"'?and?Address="?+?Address,?conn);
int?count?=?Convert.ToInt32(selectcmd.ExecuteScalar());
if(count?>?0)
{
updatecount++;
}
else
{
SqlCommand?insertcmd?=?new?SqlCommand("insert?into?users(Name,Sex,Age,Address)?values('"?+?Name?+?"','"?+?Sex?+?"',"?+?Age?+?",'"?+?Address?+?"')",?conn);
insertcmd.ExecuteNonQuery();
insertcount++;
}
}
else
{
errorcount++;
}
}
Response.Write((insertcount?+?"條數據導入成功!"?+?updatecount?+?"條數據重復!"?+?errorcount?+?"條數據部分信息為空沒有導入!"));
}
catch(Exception?ex)
{
}
}
總結
以上是生活随笔為你收集整理的net以execl做数据库_C#.NET Excel文件数据导入SQL Server数据库完整代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初学者选黑卡还是微单_入门单反和微单相机
- 下一篇: 字段定义_两大高招逐浪CMS中定义省地市