• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2007年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            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文件中若干列導入數據庫怎么辦的呢,原理差不多,我就將代碼直接給出了:
                               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();                
                               string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
                            OleDbConnection cnnxls 
            = new OleDbConnection (mystring);
                            OleDbDataAdapter myDa 
            =new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
                            DataSet myDs 
            =new DataSet();
                            myDa.Fill(myDs);
                            
            if(myDs.Tables[0].Rows.Count > 0)
                            
            {
                                
            string strSql = "";
                                
            string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
                                OleDbConnection conn 
            =new OleDbConnection(CnnString);
                                conn.Open ();
                                OleDbCommand myCmd 
            =null;                    
                                
            for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一個工作表中行數,不包括第一行,
                                {
                                    
            strSql="insert into txtInsert(id,name) values (";
                                    strSql 
            += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";
                                    strSql 
            += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";
                                    myCmd
            =new OleDbCommand(strSql,conn);
                                    
            try
                                    
            {                            
                                        myCmd.ExecuteNonQuery();                                                        
                                        Response.Write(
            "<script language=javascript>alert('數據導入成功!')</script>");
                                    }

                                    
            catch (OleDbException err)
                                    
            {                                                       
                                        Response.Write(
            "導入數據庫時出錯:" +err.ToString());
                                        
            break;
                                    }

                                }

                                conn.Close();
            其他部分代碼自己加吧,這里就是出錯失誤回滾有點不好處理,請高手指教?。?/span>
            posted on 2013-03-18 21:11 聶文龍 閱讀(1536) 評論(0)  編輯 收藏 引用 所屬分類: Database 、Visual C++
            久久精品国产精品亚洲人人 | 一本色综合网久久| AV无码久久久久不卡蜜桃| 精品久久香蕉国产线看观看亚洲| 欧美久久久久久| 亚洲国产精品一区二区久久hs| 久久精品国产精品亚洲毛片| 久久久久亚洲av成人无码电影| 色88久久久久高潮综合影院| 一本色道久久综合亚洲精品| 热综合一本伊人久久精品| 国产免费久久精品99久久| 99久久国产亚洲综合精品| 亚洲Av无码国产情品久久| 色综合久久无码五十路人妻| 精品久久无码中文字幕| 亚洲精品无码久久久久sm| 亚洲av成人无码久久精品| 国产精品久久久久久五月尺| 亚洲AV无码成人网站久久精品大| 久久午夜夜伦鲁鲁片免费无码影视| 久久精品中文字幕有码| 久久夜色精品国产亚洲av| 国内精品久久久久影院日本| 久久本道伊人久久| 亚洲国产成人久久综合区| 久久久久久精品成人免费图片| 热99re久久国超精品首页| 久久er热视频在这里精品| 久久99亚洲网美利坚合众国| 久久综合香蕉国产蜜臀AV| 久久久精品人妻一区二区三区四 | 久久久久国产精品熟女影院 | 成人午夜精品久久久久久久小说 | 久久天天躁狠狠躁夜夜不卡| 欧美久久久久久| 久久久久久无码国产精品中文字幕| 久久精品国产亚洲AV电影| 久久婷婷久久一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 91久久精品国产91性色也|