用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:\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命令
        /// </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"做为字段分割符,以"\n"做为行分割符。

-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 文件夹\bcp.exe\sqlncli.dll 这3个就可以了。 如果程式的机器不让安装SQLServer, 这是一个很好的选择。

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

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

这个SQL。

 
分类: OtherNet
 

用C#中实现的,调用CMD来执行BCP的代码的更多相关文章

  1. [转]使用C#调用cmd来执行sql脚本

    本文转自:https://blog.csdn.net/tvmerp/article/details/1822669 下面是使用C#调用cmd来执行osql实现脚本的执行. using System; ...

  2. 在IIS7.5中ASP.NET调用cmd程序拒绝访问决绝方法小记

    前言 昨天利用Github的Webhook实现自动部署站点,其中要调用命令行(cmd.exe)程序执行shell脚本. 在本地测试没有任何问题,部署到服务器之后,发现错误信息:访问拒绝. 问题 没有权 ...

  3. IE浏览器中使用js调用cmd命令行demo

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  4. C#程序调用cmd.exe执行命令

    代码部分 using System.Diagnostics; public class CmdHelper { private static string CmdPath = @"C:\Wi ...

  5. 调用cmd.exe执行pdf的合并(pdftk.exe)

    今天调查一个pdf文件的抽取,合并功能,用到下面这个工具(pdftk): https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ 在cmd.exe里执 ...

  6. notepad++通过调用cmd运行java程序

    notepad++运行java程序方法主要有下面两个: 通过插件NppExec运行(自行百度“notepad++运行java”) 通过运行 调用cmd编译执行java程序(下面详细讲解) 点击上面工具 ...

  7. C# 调用cmd命令行路径中带空格问题

    今天打包winform程序,程序中本身有一处需要调用cmd.exe,打包安装在C:\Program Files目录下,然后调用cmd的地方,就弹出了C:\Program不是内部或外部命令,也不是可运行 ...

  8. 1.JAVA中使用JNI调用C++代码学习笔记

    Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI?  Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...

  9. [转]Delphi调用cmd的两种方法

    delphi调用cmd的两种方法vars:string;begins:='cmd.exe /c '+edit1.Text+' >c:\1.txt';winexec(pchar(s),sw_hid ...

随机推荐

  1. Samza/KafkaAnalysizing

    Apache Samza is a distributed stream processing framework. It uses Apache Kafka for messaging, and A ...

  2. iOS、真机调试

    Xcode中IOS.真机测试 一.购买开发者账号(需要有信用卡.每年支付$99.0) 二.直接淘宝购买一个.用于测试,但是不能上传App 1.获取手机的UUID(Identifier xxxxxx9e ...

  3. 新版live555代理server

    好久没搞流媒体了,近期又回归了,已经把live555代理服务器更新到最新的live555代码(V0.82). 改进了一大坨问题,还去掉了一个类,代码更精简了. 改进了命令行參数格式,仅仅要这样:rts ...

  4. Python的html和xml解析库Beautiful Soup

    网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

  5. c语言复杂声明解析

    这是个好东西,接触c语言好几年了,第一次看到这东西,惊喜万分. 先提供个分析案例,以后看方便 vector <int> * (*seq_array[]) (int )={func1,fun ...

  6. Write the code.Change the world.---WWDC2014

  7. CKPlayer从Cookie里读取上次播放记录的一个demo

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  8. 新手可以学习cocos2dx 3.0 组态(两)

    这主要是关于cocos3.0 组态,鉴于互联网已经有很多这样的文章.所以我简单谈一下: 1.python2.7 因为cocos目新建是用python脚本做的,至于为什么不用python3.x  那么请 ...

  9. Nancy和MVC的简单对比

    Nancy和MVC的简单对比 在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy ...

  10. [Android] Volley源代码分析(五岁以下儿童)Q \\ u0026一个

    Volley源代码分析系列那里一段时间,告诉我,有许多私人留言,同时一些问题抛出.对于一些简单的问题,我们跳,这两天被连接到朋友@smali提出的问题.告诉我你不得不赞叹查看源代码时的详细程度,大家一 ...