select * from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=C:\Users\Administrator\Desktop;','select * from Num.txt')
select * from opendatasource('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=C:\Users\Administrator\Desktop')...[Num.txt]
BULK INSERT master..Temp FROM 'C:\Users\Administrator\Desktop\Num.txt' WITH ( FIELDTERMINATOR ='
', ROWTERMINATOR= '\n')
/** 導入文本文件EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' /** 導出文本文件EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'或EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' 導出到TXT文本,用逗號分開exec master..xp_cmdshell 'bcp "庫名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'
在做一些web數據庫管理系統的時候經常要實現將帳戶批量注冊的功能,今天就來講講如何在C#-web項目中將txt文件和excel文件導入SQL2000數據庫。1.數據庫準備在SQL2000數據庫的實例數據庫pubs中建立一個數據表txtInsert,字段很簡單:id,name兩個。2.txt文本文件導入對于數據文件導入與導出SQL2000提供了BULK INSERT和BCP語句,在這里可以使用BULK INSERT命令實現。假設在c盤上有一個文本文件stu.txt內容為: 1,tom 2,jack 3,jhon ......實現導入的C#代碼如下:protected System.Web.UI.HtmlControls.HtmlInputFile fName; protected System.Web.UI.WebControls.Button BtnInsert;//上面兩個控件自己添加
private void BtnInsert_Click(object sender, System.EventArgs e)
{
string fPath=this.fName.PostedFile.FileName;//獲得要導入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得文件的擴展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//數據庫連接對象
con.Open();
try
{
SqlCommand com=new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR= '\n')",con);
//其中的FIELDTERMINATOR=','指明字段間所使用的分隔符為逗號
//其中ROWTERMINATOR= '\n'指明記錄間所使用的分隔符為回車
com.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('數據導入成功!')</script>");
}
catch (SqlException SQLexc)
{
Response.Write("導入數據庫時出錯:" + SQLexc.ToString());
}
con.Close();
} 好了,這個txt文件的導入相對簡單,在數據庫中我也沒有設置主鍵,我在里面也沒有加出錯回滾事務操作,在下面的excel文件的導入中介紹。3.excel文件的導入在c盤里建立一個stu.xls文件,在sheet1工作表中有兩列數據如下: 編號 姓名 1 tom 2 jack 3 john ......注意,工作表的第一行是作為標題行的不會被插入到數據庫中,真正導入從第二行開始。為了演示事物出錯回滾,在這里將txtInsert數據庫表中的id字段設置為主鍵。實現的C#代碼如下:
private void BtnInsert_Click(object sender, System.EventArgs e)
{
string fPath=this.fName.PostedFile.FileName;//獲得要導入的文本文件
string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得文件的擴展名
SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//數據庫連接對象
con.Open();
//注意下面的連接字符串,是它起到了導入的作用
SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);
SqlTransaction myTran=con.BeginTransaction();//開始一個事務操作
excelCmd.Transaction=myTran;
try
{
excelCmd.ExecuteNonQuery();
myTran.Commit();//提交事務
Response.Write("<script language=javascript>alert('數據導入成功!')</script>");
}
catch (SqlException err)
{
myTran.Rollback(); //出錯回滾事務操作
//以下三行是去掉數據庫出錯信息中的非法字符單引號、回車和換行符,否則在使用時javascript代碼將有語法錯誤
//因為js的編碼和c#的編碼不同
string errString=err.Message.Replace("'"," ");
errString=errString.Replace(Convert.ToChar(13).ToString(),"");
errString=errString.Replace(Convert.ToChar(10).ToString(),"");
//顯示出錯信息框
Response.Write("<script language=javascript>alert('導入數據庫時出錯!詳細信息:"+errString+"')</script>");
}
con.Close();
}
這里“顯示出錯信息框”開始我沒有田間那三行代碼,結果搞了半天,最后還是在html文件中發現javascript代碼部分出現了分行,老是提示“未結束的字符串常量”,所以導致不能打開信息框,郁悶死我了,花了好多時間。4.將excel中部分列導入數據庫的方法上面講了關于將整個excel文件導入數據庫的方法,那么在實際項目中遇到將excel文件中若干列導入數據庫怎么辦的呢,原理差不多,我就將代碼直接給出了:其他部分代碼自己加吧,這里就是出錯失誤回滾有點不好處理,請高手指教!!
posted on 2013-03-18 21:11
聶文龍 閱讀(1525)
評論(0) 編輯 收藏 引用 所屬分類:
Database 、
Visual C++