C# 代碼執行MySQL腳本文件--Using MySqlScript


找了好久,在MySQL官網找到了,連接如下:

http://dev.mysql.com/doc/refman/5.5/en/connector-net-tutorials-mysqlscript.html

22.2.4.8. Tutorial: Using MySqlScript

22.2.4.8.1. Using Delimiters with MySqlScript

       第一步:引用 程序集 MySql.Data.dll

       第二步:應用類MySqlScript :

這是官網的代碼:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 using MySql.Data;
 7 using MySql.Data.MySqlClient;
 8 
 9 namespace ConsoleApplication8
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******;";
16             MySqlConnection conn = new MySqlConnection(connStr);
17 
18             try
19             {
20                 Console.WriteLine("Connecting to MySQL...");
21                 conn.Open();
22 
23                 string sql =    "DROP PROCEDURE IF EXISTS test_routine??" +
24                                 "CREATE PROCEDURE test_routine() " + 
25                                 "BEGIN " + 
26                                 "SELECT name FROM TestTable ORDER BY name;" + 
27                                 "SELECT COUNT(name) FROM TestTable;" +
28                                 "END??" +
29                                 "CALL test_routine()";
30 
31                 MySqlScript script = new MySqlScript(conn);
32             
33                 script.Query = sql;
34                 script.Delimiter = "??";
35                 int count = script.Execute();
36                 Console.WriteLine("Executed " + count + " statement(s)");
37                 script.Delimiter = ";";
38                 Console.WriteLine("Delimiter: " + script.Delimiter);
39                 Console.WriteLine("Query: " + script.Query);
40             }
41             catch (Exception ex)
42             {
43                 Console.WriteLine(ex.ToString());
44             }
45 
46             conn.Close();
47             Console.WriteLine("Done.");
48         }
49     }
50 }

 

看我在官網代碼基礎上注釋掉和修改string sql的內容(以下代碼第23行,添加了:Delimiter??,

並且注釋掉了第34行和第37行//script.Delimiter = "??";我想說明的是MySqlScript類能自己

處理一些特殊情況(如:特殊字符,注釋,關鍵字Delimiter等等),MySqlScript自己會處理

好的,不用你管。不要被官網的那幾個英文繞暈了,還要自己script.Delimiter = "??";去處理特殊情況 ,看看:

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 using MySql.Data;
 7 using MySql.Data.MySqlClient;
 8 
 9 namespace ConsoleApplication8
10 {
11     class Program
12     {
13         static void Main(string[] args)
14         {
15             string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******;";
16             MySqlConnection conn = new MySqlConnection(connStr);
17 
18             try
19             {
20                 Console.WriteLine("Connecting to MySQL...");
21                 conn.Open();
22 
23                 string sql =    "Delimiter ??  DROP PROCEDURE IF EXISTS test_routine??" +
24                                 "CREATE PROCEDURE test_routine() " + 
25                                 "BEGIN " + 
26                                 "SELECT name FROM TestTable ORDER BY name;" + 
27                                 "SELECT COUNT(name) FROM TestTable;" +
28                                 "END??" +
29                                 "CALL test_routine()";
30 
31                 MySqlScript script = new MySqlScript(conn);
32             
33                 script.Query = sql;
34                 //script.Delimiter = "??"; 35                 int count = script.Execute();
36                 Console.WriteLine("Executed " + count + " statement(s)");
37                 //script.Delimiter = ";"; 38                 Console.WriteLine("Delimiter: " + script.Delimiter);
39                 Console.WriteLine("Query: " + script.Query);
40             }
41             catch (Exception ex)
42             {
43                 Console.WriteLine(ex.ToString());
44             }
45 
46             conn.Close();
47             Console.WriteLine("Done.");
48         }
49     }
50 }

            最后,string sql可以從sql腳本文件中讀取;            

1                                     FileInfo file = new FileInfo(filename);  //filename是sql腳本文件路徑。
2                                     string sql = file.OpenText().ReadToEnd();

        這是腳本文件:

Delimiter ??  
DROP PROCEDURE IF EXISTS test_routine??
CREATE PROCEDURE test_routine() 
BEGIN 
   SELECT name FROM TestTable ORDER BY name;
   SELECT COUNT(name) FROM TestTable;
END??

Delimiter ;
CALL test_routine();

 

OK啦!

后記:

如果執行的腳本是創建數據庫的腳本,例如:

createDataBase.sql

-- ----------------------------
-- CREATE SCHEMA `TestDB`

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

create database if not exists `TestDB`;

連接字符串中不能有數據庫的名字,否則執行腳本失敗,道理很顯然易見,在數據庫沒創建之前,根本無法通過該連接執行。

在數據庫尚未存在,需要創建數據時,創建的連接應該是:

15             string connStr = "server=localhost;user=root;database=;port=3306;password=******;";
16             MySqlConnection conn = new MySqlConnection(connStr);

database=;

         (即:沒有數據庫名)

而不是:

database=TestDB;

 

 

          


免責聲明!

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



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