zoukankan      html  css  js  c++  java
  • C# 调用并执行SQL脚本文件

    原文连接:http://www.cnblogs.com/long-gengyun/archive/2012/05/25/2517954.html


    突然接到leader的任务,为运维写个小工具,给一个参数然后调用一个sql脚本文件并替换器内部某个参数,然后执行.

    于是工作开始了...

    首先想到的是能让C#程序直接执行sql脚本文件,类似SSMS直接打开sql文件并执行一样,搜索了一下结果还真有,不过需要借用mssql的几个类库及命名空间:

    Microsoft.SqlServer.ConnectionInfo.dll

    Microsoft.SqlServer.Smo.dll

    --------------------------------------------

    using Microsoft.SqlServer.Management.Common;

    using Microsoft.SqlServer.Management.Smo;

    这里有一个小插叙,对于vs2008里可以直接引用这个这两个类库,但在vs2010里的引用就无法找到这两个类库了(不知道微软是怎么考虑的)

    还好我电脑vs2008和vs2010都安装了

    不过我还是避易就难的讲一下,vs2010在引用里无法找到这两个类库,那我们就想办法找到它,首先我电脑安装了mssqlserver2008 ,

    我去X:\Program Files\Microsoft SQL Server\100\SDK\Assemblies 找到

    Microsoft.SqlServer.ConnectionInfo.dll

    Microsoft.SqlServer.Smo.dll

    Microsoft.SqlServer.Management.Sdk.Sfc.dll(这个一定要考到你的程序目录,但你可以不引用)

    然后手动添加应用,第三个dll一定要引用,不然会报错

    下面看代码:

    //补卡操作
             private void PatchCard()
             {
                 string path = System.Environment.CurrentDirectory;
                 string CardNo = txtCardNo.Text.Trim();
                 string connectonstring=ConfigurationManager.AppSettings["connectionString"].ToString();
                 if(CardNo==null||CardNo=="")
                 {
                     MessageBox.Show("卡号不能为空!");
                     return;
                 }
                 if(!path.EndsWith(@"\"))
                 {
                     path += @"\";
                 }
                 path+="补蓝鲸卡.sql";    //获取脚本位置
                 if (File.Exists(path))
                 {
                     FileInfo file = new FileInfo(path);
                     string script = file.OpenText().ReadToEnd();
                     script=script.Replace("H00001", CardNo);  //替换脚本里的参数
                     try
                     {
                           //执行脚本
                        SqlConnection conn = new SqlConnection(connectonstring);
                        Microsoft.SqlServer.Management.Smo.Server server = new Server(new ServerConnection(conn));
                        int i= server.ConnectionContext.ExecuteNonQuery(script);
                        if (i == 1)
                        {
                            MessageBox.Show("恭喜!\n"+CardNo+" 补卡成功!","成功");
                            txtCardNo.Text = "";
                            CreateLog(CardNo, true);
                        }
                        else
                        {
                            MessageBox.Show("@_@ 再试一次吧!","失败");
                        }
                         
                     }
                     catch (Exception es)
                     {
                         MessageBox.Show(es.Message);
                         CreateLog(CardNo + "  " + es.Message, false);
                     }
                 }
                 else
                 {
                     MessageBox.Show("脚本不存在!");
                     return;
                 }
             }

    OK,搞定了,看是很简单吧~~

    着意耕耘,自有收获

    原创文字只代表本人某一时间内的观点或结论,本人不对涉及到的任何代码担保。转载请标明出处!

  • 相关阅读:
    Maximum Flow Exhaustion of Paths Algorithm
    ubuntu下安装java环境
    visualbox使用(二)
    vxworks一个超级奇怪的错误(parse error before `char')
    February 4th, 2018 Week 6th Sunday
    February 3rd, 2018 Week 5th Saturday
    February 2nd, 2018 Week 5th Friday
    February 1st, 2018 Week 5th Thursday
    January 31st, 2018 Week 05th Wednesday
    January 30th, 2018 Week 05th Tuesday
  • 原文地址:https://www.cnblogs.com/leleroyn/p/2518266.html
Copyright © 2011-2022 走看看