10bet网址
连接器和api手册
本手册下载
PDF (Ltr)- 5.2 mb
PDF (A4)- 5.2 mb


4.6.8教程:使用MySqlScript

本教程将教会您如何使用MySqlScript类。该类使您能够执行一系列语句。根据具体情况,这可能比使用MySqlCommand的方法。

有关“MySqlScript类可以在MySQL Connector/NET提供的参考文档中找到。10bet官方网站

方法设置一个简单的测试数据库和表,以运行本教程中的示例程序mysql命令行客户端或MySQL工作台。命令的mysql命令行客户端如下:

创建数据库TestDB;使用TestDB;创建表TestTable (id INT NOT NULL主键AUTO_INCREMENT,名称VARCHAR(100))

主要的方法是MySqlScript类是执行方法。方法将脚本(语句序列)赋值给查询要执行的MySqlScript对象属性。的查询属性可以通过MySqlScript构造函数或使用查询财产。执行返回执行的语句数。

MySqlScript对象将在连接集中执行指定的脚本连接财产。同样,可以直接设置此属性或通过MySqlScript构造函数。下面的代码片段说明了这一点:

sql = "SELECT * FROM TestTable";...MySqlScript脚本= new MySqlScript(conn, sql);...MySqlScript脚本= new MySqlScript();脚本。查询= sql; script.Connection = conn; ... script.Execute();

MySqlScript类有几个与之关联的事件。有:

  1. 如果发生错误,则生成错误。

  2. ScriptCompleted -当脚本成功完成执行时生成。

  3. StatementExecuted—在每个语句执行后生成。

可以将事件处理程序分配给这些事件中的每个。当连接的事件发生时,将回调这些用户提供的例程。下面的代码显示了如何设置事件处理程序。

脚本。Error += new MySqlScriptErrorEventHandler(script_Error);脚本。ScriptCompleted += new EventHandler(script_ScriptCompleted);脚本。StatementExecuted += new MySqlStatementExecutedEventHandler(script_StatementExecuted);

在VisualStudio中,您可以通过使用制表符补全来填写存根例程来节省输入。例如,从输入开始,脚本。误差+ =.然后按选项卡,然后按选项卡一次。分配完成,并创建了存根事件处理程序。下面是一个完整的工作示例:

使用系统;使用System.Collections.Generic;使用来;使用text;使用System.Data;使用MySql.Data;使用MySql.Data.MySqlClient;命名空间MySqlScriptTest {class Program {static void Main(string[] args) {string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******";MySqlConnection conn = new MySqlConnection(connStr);尝试{控制台。WriteLine("Connecting to MySQL..."); conn.Open(); string sql = "INSERT INTO TestTable(name) VALUES ('Superman');" + "INSERT INTO TestTable(name) VALUES ('Batman');" + "INSERT INTO TestTable(name) VALUES ('Wolverine');" + "INSERT INTO TestTable(name) VALUES ('Storm');"; MySqlScript script = new MySqlScript(conn, sql); script.Error += new MySqlScriptErrorEventHandler(script_Error); script.ScriptCompleted += new EventHandler(script_ScriptCompleted); script.StatementExecuted += new MySqlStatementExecutedEventHandler(script_StatementExecuted); int count = script.Execute(); Console.WriteLine("Executed " + count + " statement(s)."); Console.WriteLine("Delimiter: " + script.Delimiter); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); } static void script_StatementExecuted(object sender, MySqlScriptEventArgs args) { Console.WriteLine("script_StatementExecuted"); } static void script_ScriptCompleted(object sender, EventArgs e) { /// EventArgs e will be EventArgs.Empty for this method Console.WriteLine("script_ScriptCompleted!"); } static void script_Error(Object sender, MySqlScriptErrorEventArgs args) { Console.WriteLine("script_Error: " + args.Exception.ToString()); } } }

script_ScriptCompleted事件处理程序,EventArgs参数eEventArgs。空.在这种情况下ScriptCompleted事件中没有需要获取的额外数据,这就是事件对象为的原因EventArgs。空

使用MySqlScript分隔符

根据脚本的性质,您可能需要控制用于分隔组成脚本的语句的分隔符。最常见的例子是将多语句存储例程作为脚本的一部分。在本例中,如果默认分隔符为,则在尝试执行该脚本时将得到错误。例如,考虑以下存储例程:

SELECT name FROM TestTableSELECT COUNT(name) FROM TestTable结束

这个例程实际上需要在MySQL服务器上作为一条语句执行。但是,使用默认分隔符,MySqlScriptClass会将上面的语句解释为两个语句,第一个语句是:

SELECT name FROM TestTable

将其作为语句执行将会产生错误。要解决这个问题MySqlScript支持设置不同的分隔符。这是通过分隔符财产。例如,您可以将分隔符设置为??,在这种情况下,上述存储的例程在执行时将不再生成错误。脚本中可以分隔多个语句,例如,你可以有一个三个语句的脚本,如:

"DROP PROCEDURE IF EXISTS test_routine??"+ "CREATE PROCEDURE test_routine()+ "BEGIN " + "SELECT name FROM TestTable;"+ "SELECT COUNT(name) FROM TestTable;"+“结束? ?”+”调用test_routine()”;

方法可以在任何位置将分隔符更改回来分隔符财产。下面的代码显示了一个完整的工作示例:

使用系统;使用System.Collections.Generic;使用来;使用text;使用MySql.Data;使用MySql.Data.MySqlClient;命名空间ConsoleApplication8 {class程序{static void Main(string[] args) {string connStr = "server=localhost;user=root;database=TestDB;port=3306;password=******";MySqlConnection conn = new MySqlConnection(connStr);尝试{控制台。WriteLine(“连接到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."); } } }