用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. R.layout.main connot be resolved 和R.java消失

    出现例如以下问题: 鼠标放到出代码上面: 分析问题: 1.查看R文件是否被生成.假设没有生成,则勾选build Automatically,然后Clean: 2.假设R文件已生成.则删除去掉代码中: ...

  2. Linux常用命令3--如何设置IP地址?如何更改系统时间?

    Linux常用命令 系统状态监控 [1]ps:用于显示当前系统中运行的进程. 语法:ps [-option]:常用的参数有:-a;-u;-x;-e;-f. -a:显示所有进程: -u:显示所有用户: ...

  3. 《浪潮之巅》完全系类——IT人士必读经典

    浪潮之巅 第一章 帝国的余辉(AT&T) 浪潮之巅第二章 — 蓝色巨人(IBM) 浪潮之巅第三章 — “水果”公司的复兴 (乔布斯和苹果公司) 浪潮之巅第四章 — 计算机工业的生态链 浪潮之巅 ...

  4. 19.最经济app发短信的方法

    在创业团队.一个重要的原则是能省就省,该花的花,明智地使用金钱. 今的app,为了获取用户的社交关系.须要用户的手机号注冊. 用手机号注冊就涉及到一个发送短信验证码的问题,那怎么才干在短信服务上投入最 ...

  5. CentOS 7 结构体GCC 4.8.2 32位编译环境

    centos 7 结构体gcc 32位编译环境 1介绍 1.1背景 学习新 C++ 2011和C11标准. 1.2使用软件 CentOS 7(Linux version 3.10.0-123.el7. ...

  6. leetcode第33题--Search for a Range

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  7. 在ubuntu下开发stm32f4-discovery

    前面零散地记录了一些如何安装编译器,调试器等笔记,这里就准备开始着手试一下这整块系统了. 简单不完全地回顾一下所需要安装的软件: 1 编译器 使用的是codesourcey,因为之前有使用过该套编译器 ...

  8. javascript 学习总结(九)面向对象编程

    1.面向对象的工厂方法 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; ...

  9. 我的Android 4 学习系列之数据库和Content Provider

    目录 创建数据库和使用SQLite 使用Content Provider.Cusor和Content Value来存储.共享和使用应用程序数据 使用Cursor Loader异步查询Content P ...

  10. 通过改变viewport 实现网站自适应

    var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth/640; var userAgent = nav ...