C# 調用並執行SQL腳本文件


突然接到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一定要引用,不然會報錯

 

下面看代碼:

 

 1        // 補卡操作
 2          private  void PatchCard()
 3         {
 4              string path = System.Environment.CurrentDirectory;
 5              string CardNo = txtCardNo.Text.Trim();
 6              string connectonstring=ConfigurationManager.AppSettings[ " connectionString "].ToString();
 7              if(CardNo== null||CardNo== "")
 8             {
 9                 MessageBox.Show( " 卡號不能為空! ");
10                  return;
11             }
12              if(!path.EndsWith( @" \ "))
13             {
14                 path +=  @" \ ";
15             }
16             path+= " 補藍鯨卡.sql ";     // 獲取腳本位置
17              if (File.Exists(path))
18             {
19                 FileInfo file =  new FileInfo(path);
20                  string script = file.OpenText().ReadToEnd();
21                 script=script.Replace( " H00001 ", CardNo);  //替換腳本里的參數
22                  try
23                 {
                       //執行腳本
24                     SqlConnection conn =  new  SqlConnection(connectonstring);
25                     Microsoft.SqlServer.Management.Smo.Server server =  new  Server( new  ServerConnection(conn));
26                     int  i= server.ConnectionContext.ExecuteNonQuery(script);

27                     if (i ==  1)
28                    {
29                        MessageBox.Show( " 恭喜!\n "+CardNo+ "  補卡成功! ", " 成功 ");
30                        txtCardNo.Text =  "";
31                        CreateLog(CardNo,  true);
32                    }
33                     else
34                    {
35                        MessageBox.Show( " @_@ 再試一次吧! ", " 失敗 ");
36                    }
37                     
38                 }
39                  catch (Exception es)
40                 {
41                     MessageBox.Show(es.Message);
42                     CreateLog(CardNo +  "    " + es.Message,  false);
43                 }
44             }
45              else
46             {
47                 MessageBox.Show( " 腳本不存在! ");
48                  return;
49             }
50         }

 

OK,搞定了,看是很簡單吧~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM