• <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
            <2013年3月>
            242526272812
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(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數(shù)據(jù)庫管理系統(tǒng)的時候經(jīng)常要實現(xiàn)將帳戶批量注冊的功能,今天就來講講如何在C#-web項目中將txt文件和excel文件導入SQL2000數(shù)據(jù)庫。
            1.數(shù)據(jù)庫準備
            在SQL2000數(shù)據(jù)庫的實例數(shù)據(jù)庫pubs中建立一個數(shù)據(jù)表txtInsert,字段很簡單:id,name兩個。
            2.txt文本文件導入
            對于數(shù)據(jù)文件導入與導出SQL2000提供了BULK INSERT和BCP語句,在這里可以使用BULK INSERT命令實現(xiàn)。假設在c盤上有一個文本文件stu.txt內(nèi)容為:
                1,tom
                2,jack
                3,jhon
                ......
            實現(xiàn)導入的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=;");//數(shù)據(jù)庫連接對象
                        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('數(shù)據(jù)導入成功!')</script>");                    
                            }

                         
            catch (SqlException SQLexc)
                            
            {
                                Response.Write(
            "導入數(shù)據(jù)庫時出錯:" + SQLexc.ToString());
                            }

            con.Close();
            }

            好了,這個txt文件的導入相對簡單,在數(shù)據(jù)庫中我也沒有設置主鍵,我在里面也沒有加出錯回滾事務操作,在下面的excel文件的導入中介紹。
            3.excel文件的導入
            在c盤里建立一個stu.xls文件,在sheet1工作表中有兩列數(shù)據(jù)如下:
                 編號  姓名
                 1        tom
                 2        jack
                 3        john
                 ......
            注意,工作表的第一行是作為標題行的不會被插入到數(shù)據(jù)庫中,真正導入從第二行開始。
            為了演示事物出錯回滾,在這里將txtInsert數(shù)據(jù)庫表中的id字段設置為主鍵。實現(xiàn)的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=;");//數(shù)據(jù)庫連接對象
               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('數(shù)據(jù)導入成功!')</script>");
                }

                
            catch (SqlException err)
                
            {       
                 myTran.Rollback(); 
            //出錯回滾事務操作
                 
            //以下三行是去掉數(shù)據(jù)庫出錯信息中的非法字符單引號、回車和換行符,否則在使用時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('導入數(shù)據(jù)庫時出錯!詳細信息:"+errString+"')</script>");         
                }
               
               con.Close();
              }
            這里“顯示出錯信息框”開始我沒有田間那三行代碼,結果搞了半天,最后還是在html文件中發(fā)現(xiàn)javascript代碼部分出現(xiàn)了分行,老是提示“未結束的字符串常量”,所以導致不能打開信息框,郁悶死我了,花了好多時間。
            4.將excel中部分列導入數(shù)據(jù)庫的方法
            上面講了關于將整個excel文件導入數(shù)據(jù)庫的方法,那么在實際項目中遇到將excel文件中若干列導入數(shù)據(jù)庫怎么辦的呢,原理差不多,我就將代碼直接給出了:
                               string  fPath=this.fName.PostedFile.FileName;//獲得要導入的文本文件     
                               string  extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得文件的擴展名   
                               SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//數(shù)據(jù)庫連接對象
                               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++)//第一個工作表中行數(shù),不包括第一行,
                                {
                                    
            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('數(shù)據(jù)導入成功!')</script>");
                                    }

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

                                }

                                conn.Close();
            其他部分代碼自己加吧,這里就是出錯失誤回滾有點不好處理,請高手指教!!
            posted on 2013-03-18 21:11 聶文龍 閱讀(1525) 評論(0)  編輯 收藏 引用 所屬分類: DatabaseVisual C++
            久久99国产精品久久久| 亚洲国产精品无码成人片久久| 色8久久人人97超碰香蕉987| 91久久成人免费| 伊人久久精品无码二区麻豆| 久久99精品久久久久久秒播| 久久亚洲春色中文字幕久久久 | 久久精品成人免费观看97| 亚洲精品美女久久777777| 久久久久久国产精品免费无码| 97精品伊人久久久大香线蕉 | 国产精品九九久久精品女同亚洲欧美日韩综合区| 久久久噜噜噜久久| 国内精品久久久久影院网站| 色婷婷久久久SWAG精品| 国产亚洲精午夜久久久久久| 久久久无码精品亚洲日韩蜜臀浪潮 | 精品久久久久久久久午夜福利| 伊人 久久 精品| 香蕉久久夜色精品国产2020| 2021国内久久精品| 亚洲午夜久久久久久久久电影网| 国产激情久久久久影院老熟女免费| 欧美亚洲国产精品久久久久| 狠狠色伊人久久精品综合网| 九九久久自然熟的香蕉图片| 一本色道久久综合狠狠躁| 性高朝久久久久久久久久| 久久综合伊人77777| 99国内精品久久久久久久 | 伊人久久大香线蕉综合5g| 久久精品国产福利国产琪琪| 国产成人综合久久久久久 | 漂亮人妻被中出中文字幕久久| 国产激情久久久久影院老熟女| 亚洲狠狠综合久久| 女人香蕉久久**毛片精品| 久久se精品一区二区影院| 丰满少妇人妻久久久久久4| 久久se精品一区二区| 亚洲国产精品久久久久久|