使用bcp,循环将本地txt文本导入远程sqlserver中

来源:互联网 发布:淘宝一年清多少分 编辑:程序博客网 时间:2024/04/29 23:01
txt大文件导入远程数据库,使用bcp效率极高,关于bcp的资料比较少,写了个导入的方法,在项目中应用成功,代码如下
引用空间:
using System;
using
 System.Data;
using
 System.Data.SqlClient;
using System.Diagnostics;

private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面

            string Conn = "data source=192.168.0.1;initial catalog=Test;user id=sa;password=1";
            SqlConnection sqlConn 
= new
 SqlConnection(Conn);
            SqlCommand cmd 
= new
 SqlCommand();
            cmd.Connection 
=
 sqlConn;
            SqlDataAdapter sda 
= new
 SqlDataAdapter(cmd);
            sqlConn.Open();
            cmd.CommandText 
= "Select * from Files"
;
            DataSet ds 
= new
 DataSet();
            sda.Fill(ds);

            
if(ds.Tables[0].Rows.Count>0
)
            
{
                
string BcpExec = ""
;
                
for(int i=0;i<ds.Tables[0].Rows.Count;i++
)//循环取本地文件名
                
{            
                    BcpExec 
= @"bcp Test..Data in D:/test/"
;
                    BcpExec 
+= ds.Tables[0].Rows[i]["path"
].ToString();
                    BcpExec 
+= " -S192.168.0.1 -Usa -P1 -c -t,"
;//组合bcp命令
                    Response.Write(ExeCommand(BcpExec));//执行bcp命令并显示操作结果
                }

            }

        }



        
/// <summary>
        
/// 执行Cmd命令
        
///
 确保已经server上已经安装sql,否则使用不了bcp命令,
        
///
 如果没有安装sqlserver需要将bcp.exe拷贝到相应目录(这个条件尚未测试)
        
/// </summary>

        
/// <param name="commandText"></param>
        
/// <returns></returns>

        public static string ExeCommand(string commandText)
        
{
            Process p 
= new
 Process();
            p.StartInfo.FileName 
= "cmd.exe"
;
            p.StartInfo.UseShellExecute 
= false
;
            p.StartInfo.RedirectStandardInput 
= true
;
            p.StartInfo.RedirectStandardOutput 
= true
;
            p.StartInfo.RedirectStandardError 
= true
;
            p.StartInfo.CreateNoWindow 
= true
;
            
string strOutput = null
;
            
try

            
{
                p.Start();
                p.StandardInput.WriteLine(commandText);
                p.StandardInput.WriteLine(
"exit"
);
                strOutput 
=
 p.StandardOutput.ReadToEnd();
                p.WaitForExit();
                p.Close();
            }

            
catch(Exception e)
            
{
                strOutput 
=
 e.Message;
            }

            
return strOutput;
        }