using (System.Data.Odbc.OdbcConnection cnn = new System.Data.Odbc.OdbcConnection())
            {
                cnn.ConnectionString = "...";//连接字符串没问题,这里省略
                cnn.Open();
                System.Data.Odbc.OdbcCommand command = cnn.CreateCommand();
                command.CommandText = "DELIMITER |";
                command.ExecuteNonQuery();
            }为啥会暴异常呢?

解决方案 »

  1.   

    这个delimiter是交互环境下的命令,不是mysql的客户端接口。
      

  2.   

    delimiter 是 mysql.exe 命令行工具内部的命令,不是MYSQL数据库的命令.C#中也不需要这个delimiter啊。 你直接提交就行了。
      

  3.   


    using (OdbcConnection cnn = new OdbcConnection())
                {
                    cnn.ConnectionString = "Dsn=mysql;";
                    cnn.Open();                OdbcCommand cmd = cnn.CreateCommand();
    //还是不行呀,我下面的sql语句写得有问题吗?
                    cmd.CommandText = 
                        "DROP PROCEDURE IF EXISTS sp_test;create procedure sp_test(in num int) begin end ;";
                    cmd.ExecuteNonQuery();
                }
      

  4.   

    你的数据库连接字符串是什么?为什么不直接用 
    using MySql.Data.MySqlClient;
      

  5.   

    连接字符串用的是odbc数据源,这个没问题的,我执行其他语句都可以的。using MySql.Data.MySqlClient这个要装MySql Provider的吧,visual studio不自带的。
      

  6.   

    using MySql.Data.MySqlClient这个要装MySql Provider的吧,visual studio不自带的。
    不需要,直接把 MySql.Data.dll 复制到你的C#项目文件夹中就行了。然后引用一下。
      

  7.   

    ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.42-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'create procedure sp_test(in num int) begin end' at line 1这个是异常信息
      

  8.   

    测试如下。using System;
    using MySql.Data.MySqlClient;
    using System.Data;
    using System.Data.OracleClient;
    using System.Globalization;
    using System.Collections;
    .....
            static void Main(string[] args)
            {
                string sMySQLConnStr = "Database='csdn';Data Source='localhost';User Id='root';Password='123'";
                MySqlConnection mysqlCnn = new MySqlConnection(sMySQLConnStr);
                mysqlCnn.Open();
                MySqlCommand cmd = new MySqlCommand("DROP PROCEDURE IF EXISTS sp_test;create procedure sp_test() begin select 1; end ;", mysqlCnn);
                cmd.ExecuteNonQuery();
            }
    运行结果
    mysql> show procedure status like 'sp%';
    +------+---------+-----------+----------------+---------------------+---------------------+---------------+-----
    | Db   | Name    | Type      | Definer        | Modified            | Created             | Security_type | Comm
    +------+---------+-----------+----------------+---------------------+---------------------+---------------+-----
    | csdn | sp_test | PROCEDURE | root@localhost | 2010-04-05 20:32:15 | 2010-04-05 20:32:15 | DEFINER       |     
    +------+---------+-----------+----------------+---------------------+---------------------+---------------+-----
    1 row in set (0.06 sec)mysql>
      

  9.   

    谢谢ls,我换成mysql connector/net(也就是你说的mysql.data.dll)试试
      

  10.   

    的确可以,看来应该是mysql connector/odbc的问题了