zoukankan      html  css  js  c++  java
  • 用C#中实现的,调用CMD来执行BCP的代码

    用C#中实现的,调用CMD来执行BCP的代码

    用c#中实现,调用cmd来执行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: est";
                        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命令
            /// </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;
            }


    c#中的Process类可方便的调用外部程序,所以我们可以通过调用cmd.exe程序

    加入参数 "/c " + 要执行的命令来执行一个dos命令
    (/c代表执行参数指定的命令后关闭cmd.exe /k参数则不关闭cmd.exe)

     1         private string RunCmd(string command)
         
    2         {
     
    3             //實例一個Process類,啟動一個獨立進程
     4             Process p = new Process();
     
    5 
     
    6             //Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,下面我們用到了他的幾個屬性:
     7 
     
    8             p.StartInfo.FileName = "cmd.exe";           //設定程序名
     9             p.StartInfo.Arguments = "/c " + command;    //設定程式執行參數
    10             p.StartInfo.UseShellExecute = false;        //關閉Shell的使用
    11             p.StartInfo.RedirectStandardInput = true;   //重定向標準輸入
    12             p.StartInfo.RedirectStandardOutput = true;  //重定向標準輸出
    13             p.StartInfo.RedirectStandardError = true;   //重定向錯誤輸出
    14             p.StartInfo.CreateNoWindow = true;          //設置不顯示窗口
    15 
    16             p.Start();   //啟動
    17             
    18             //p.StandardInput.WriteLine(command);       //也可以用這種方式輸入要執行的命令
    19             //p.StandardInput.WriteLine("exit");        //不過要記得加上Exit要不然下一行程式執行的時候會當機
    20             
    21             return p.StandardOutput.ReadToEnd();        //從輸出流取得命令執行結果
    22 
    23         }

    要将SQLServer中的资料导入导出,可以使用bcp.exe 。

    Bcp.exe 程式为SQLServer提供的一个提供DOS的方式和SQLServer进行交互,进行导入导出资料动作。由于是SQLServer自带的工具,所以效能上还很好,测试过导入50W行的资料,效能很好。

    格式说明:

    Bcp.exe + 数据库名称 + ".." + 数据表名称 in 要导入资料的路径 + "-c -t, " + -U登录DB的用户名 -S服务器名称 -P密码 -R


    参数说明:

    -c使用char类型做为存储类型,没有前缀且以" "做为字段分割符,以" "做为行分割符。

    -t,表示是用符号"," 为各个栏位的分割符号。

    -U 登陆数据库的用户名称

    -P 登陆数据的密码

    -S 登陆数据库的IP

    -R 表示使用本地区域及语言设定进行导入导出动作。


    在C# 中只要将 调用Process的类就调用exe就可以了。

    ProcessStartInfo psi = new ProcessStartInfo("d:\test\bcp.exe", "XXXX..XXXXX in d:\test\test_100000.log -c -t"," -Usa -P -S"192.168.0.1"");
    Process proc = Process.Start(psi);
    if (proc != null)
    {
    proc.WaitForExit();
    this.ShowStatic(11, "End");
    }

    如果C# 写的调用程式所在的机器不包括SQLServer的话,可以找一台SQLServer 将里面的bcp.exe Copy 出来就OK了。对了,还需要一些别的文件要一起Copy出来

    文件包括

    Resources 文件夹cp.exesqlncli.dll 这3个就可以了。 如果程式的机器不让安装SQLServer, 这是一个很好的选择。


    如果程序所在的机器可以安装SQLClient的话,又要导入大量的数据的话,也可以使用

    BULK INSERT TABLE FROM '{0}' WITH (FIELDTERMINATOR = '^', ROWTERMINATOR = ' ', FIRSTROW = 1)

    这个SQL。



     
    分类: OtherNet
     
    http://www.cnblogs.com/sky100/archive/2009/05/11/1454357.html
  • 相关阅读:
    linux办公软件的使用和病毒防范
    需要了解的基本礼仪素养
    遗留问题
    shell基本命令
    shell编程
    遇到过得问题
    mac电脑操作
    Linux编程
    BZOJ 1601 [Usaco2008 Oct]灌水 (建图+mst)
    BZOJ 2653 middle (可持久化线段树+中位数+线段树维护最大子序和)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3262715.html
Copyright © 2011-2022 走看看