mysqlscript文档翻译

来源:互联网 发布:少女前线枪娘数据大全 编辑:程序博客网 时间:2024/06/08 09:45

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

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文件。

0 0