mysqlscript文档翻译

根据自己的需要有选择的翻译官方文档

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

根据sql脚本的内容,你需要控制脚本的分隔符。一个最常见的例子是当你在存储过程中有一个多语句的过程,

使用默认的;分隔符,执行时就会报错(我就遇到了这个错误)

比如,以下的存储过程:

CREATE PROCEDURE test_routine()

BEGIN    

SELECT name FROM TestTable ORDER BY name;   

SELECT COUNT(name) FROM TestTable;

END

这个过程实际上执行的时候是一个语句,然而 ,如果用;分隔符,sqlscript就会认为它是两个语句,

第一个语句是

CREATE PROCEDURE test_routine()

BEGIN    

SELECT name FROM TestTable ORDER BY name;   

执行时会报语法错误,为了解决这个问题mysqlscript支持使用不同的分隔符通过使用delimiter属性。

比如,你可以设置delimiter为“??”,这样,上面的语句就不会报错。

以下是官网的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MySql.Data;
using MySql.Data.MySqlClient;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******;";
            MySqlConnection conn = new MySqlConnection(connStr);

            try
            {
                Console.WriteLine("Connecting to MySQL...");
                conn.Open();

                string sql =    "DROP PROCEDURE IF EXISTS test_routine??" +
                                "CREATE PROCEDURE test_routine() " + 
                                "BEGIN " + 
                                "SELECT name FROM TestTable ORDER BY name;" + 
                                "SELECT COUNT(name) FROM TestTable;" +
                                "END??" +
                                "CALL test_routine()";

                MySqlScript script = new MySqlScript(conn);
            
                script.Query = sql;
                script.Delimiter = "??";
                int count = script.Execute();
                Console.WriteLine("Executed " + count + " statement(s)");
                script.Delimiter = ";";
                Console.WriteLine("Delimiter: " + script.Delimiter);
                Console.WriteLine("Query: " + script.Query);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            conn.Close();
            Console.WriteLine("Done.");
        }
    }
}

以下是个人的理解:

 

当使用到mysqlscript时,可以直接在sql文件里这样写

DELIMITER ??

........

BEGIN

....

END??

DELIMITER ;

也是一种解决办法
 

在实际使用中sql脚本文件可能会比较长,情况复杂,具体使用时,mysqlscript可能不够灵活,需要重写,或者不用mysqlscript

自己处理文件,自己执行。因为mysqlscript遇到错误就会停止执行,没有更丰富的选项以及日志功能,所以可能还是需要自己来操作

sql文件。

你可能感兴趣的:(C#)