excel導入sql2008
① sql2008導入excel數據
方法如下:
1、打開要導入的Excel文件,觀察第一列是為欄位還是數據。
2、打開SQLServer,在需要導入的數據點擊右鍵 【任務】-【導入數據】
出現導入導出向導。
3、點擊下一步 ,進入【選擇數據源】頁面,注意紅框設置。
4、點擊下一步 ,進入【選擇目標】頁面,注意紅框設置。
5、點擊下一步 ,進入【指定表復制或查詢】頁面,注意紅框設置。
6、點擊下一步 ,進入【選擇源表和源視圖】頁面,注意紅框設置。
7、下一步,直到完成。出現【執行結果頁面】。
8、最後在SqlServer查詢表。
② 使用C# 把Excel的數據導入SQL server 2008
由於項目中加入了新的功能,可以使管理員向資料庫中導入Excel數據。因此,在商品管理這塊需要對Excel進行操作,在網上查了些資料,根據項目的實際情況進行了一定的優化,這里簡單的介紹下。
1.C#代碼。
<spanstyle="font-family:MicrosoftYaHei;font-size:18px;">///<summary>
///上傳Excel文件,並將數據導入到資料庫
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
protectedvoidlbtnSure_Click(objectsender,EventArgse)
{
//定義變數,並賦初值
stringurl=this.fileUpLoad.PostedFile.FileName;
stringurlLocation="";
//判斷傳輸地址是否為空
if(url=="")
{
//提示「請選擇Excel文件」
Page.ClientScript.RegisterStartupScript(Page.GetType(),"message","<scriptdefer>alert('請選擇97~2003版Excel文件!');</script>");
return;
}
//判斷獲取的是否為地址,而非文件名
if(url.IndexOf("\")>-1)
{
//獲取文件名
urlLocation=url.Substring(url.LastIndexOf("\")+1);//獲取文件名
}
else
{
//url為文件名時,直接獲取文件名
urlLocation=url;
}
//判斷指定目錄下是否存在文件夾,如果不存在,則創建
if(!Directory.Exists(Server.MapPath("~\up")))
{
//創建up文件夾
Directory.CreateDirectory(Server.MapPath("~\up"));
}
//在系統中建文件夾up,並將excel文件另存
this.fileUpLoad.SaveAs(Server.MapPath("~\up")+"\"+urlLocation);//記錄文件名到伺服器相對應的文件夾中
//Response.Write(urlLocation);
//取得保存到伺服器端的文件路徑
stringstrpath=Server.MapPath("~\up")+"\"+urlLocation;
//取得config中的欄位
stringconnectionString=ConfigurationManager.AppSettings["Connect"].ToString();
stringstrCon=ConfigurationManager.AppSettings["strUpLoad"].ToString();
//替換變數
strCon=strCon.Replace("$Con$",strpath);
//初始化導入Excel對象
ImportExcelexcel=newImportExcel();
//調用方法,將Excel文件導入資料庫
excel.TransferData(strCon,"t_Goods",connectionString);
}</span>
2.TransferData類。
<spanstyle="font-family:MicrosoftYaHei;font-size:18px;">publicvoidTransferData(stringstrCon,stringsheetName,stringconnectionString)
{
DataSetds=newDataSet();
try
{
//獲取全部數據
OleDbConnectionconn=newOleDbConnection(strCon);
conn.Open();
stringstrExcel="";
OleDbDataAdaptermyCommand=null;
strExcel=string.Format("select*from[{0}$]",sheetName);
myCommand=newOleDbDataAdapter(strExcel,strConn);
myCommand.Fill(ds,sheetName);
//如果目標表不存在則創建,excel文件的第一行為列標題,從第二行開始全部都是數據記錄
stringstrSql=string.Format("ifnotexists(select*fromsysobjectswherename='{0}')createtable{0}(",sheetName);//以sheetName為表名
foreach(System.Data.DataColumncinds.Tables[0].Columns)
{
strSql+=string.Format("[{0}]varchar(255),",c.ColumnName);
}
strSql=strSql.Trim(',')+")";
using(System.Data.SqlClient.SqlConnectionsqlconn=newSystem.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommandcommand=sqlconn.CreateCommand();
command.CommandText=strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp導入數據
//excel文件中列的順序必須和數據表的列順序一致,因為數據導入時,是從excel文件的第二行數據開始,不管數據表的結構是什麼樣的,反正就是第一列的數據會插入到數據表的第一列欄位中,第二列的數據插入到數據表的第二列欄位中,以此類推,它本身不會去判斷要插入的數據是對應數據表中哪一個欄位的
using(System.Data.SqlClient.SqlBulkCopybcp=newSystem.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied+=newSystem.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize=100;//每次傳輸的行數
bcp.NotifyAfter=100;//進度提示的行數
bcp.DestinationTableName=sheetName;//目標表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch(Exceptionex)
{
thrownewException(ex);
}
}
//進度顯示
voidbcp_SqlRowsCopied(objectsender,System.Data.SqlClient.SqlRowsCopiedEventArgse)
{
}
}</span>
4.Web界面樣式。