zoukankan      html  css  js  c++  java
  • 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;

              

  • 相关阅读:
    03人脉搜索:学会这一招,就能轻松找到90%的人的联系方式
    02 资源搜索-全面、快速查找全网你想要的任何信息、情报
    01信息搜索:全面、快速查找全网你想要的任何信息、情报.
    ansible笔记(12):handlers的用法
    ansible笔记(11):初识ansible playbook(二)
    ansible笔记(10):初识ansible playbook
    ansible笔记(9):常用模块之包管理模块
    ansible笔记(8):常用模块之系统类模块(二)
    ansible笔记(7):常用模块之系统类模块
    ansible笔记(6):常用模块之命令类模块
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/2805558.html
Copyright © 2011-2022 走看看