用的是MySQLDriverCS来访问MYSQL的
异常如下:
MySQLDriverCS Exception: MySQLDriverCS Error: wrong query.PROCEDURE education.selAllNews can't return a result set in the given context 测试代码如下:(存储过程selAllNews没错)
MySQLConnection conn = EducationHK.DAL.MySql.MySqlUtil.MySqlProvider.GetMySqlConnection();
//string sql = "select * from t_news";  //如果换成这行命令就没错
string sql = "call selAllNews(1.1);";
MySQLCommand cmd = new MySQLCommand(sql,conn);
conn.Open();
MySQLDataReader dr = cmd.ExecuteReaderEx();
while (dr.Read())
{
   Response.Write(dr["title"].ToString() + "<BR/>");
}另外我用PHP调用此存储过程没问题,但是前提是要在mysql_connect(...)最后一个参数加上 131072,即:mysql_connect(host,user,pwd,1,131072) 否则也是会出现同样的错误很是不解

解决方案 »

  1.   

    MySql用的是“?”调用的存储过程  而不是MSSQL中的“@”
    你试试
      

  2.   

    我写的mysql的存储过程掉用
        public int CheckLogin(string loginName, string loginPwd)
        {
            string sql = "select count(*) from admin where username=? and userpwd=?";
            MySqlConnection conn = new MySqlConnection(constr);
            MySqlCommand comm = new MySqlCommand(sql, conn);
            MySqlParameter p1 = new MySqlParameter("?loginName",MySqlType.VarChar,50);
            p1.Value = loginName;
            comm.Parameters.Add(p1);
            MySqlParameter p2 = new MySqlParameter("?loginPwd",MySqlType.VarChar,50);
            p2.Value = loginPwd;
            comm.Parameters.Add(p2);        comm.Connection.Open();
            int i = (int)comm.ExecuteScalar();
            comm.Connection.Close();
            return i; 
        }int i= CheckLogin(thsi.TextBox1.Text,this.TextBox2.Text)if (i>0)
    {
     ............
    }
      

  3.   

    string sql = "select count(*) from admin where username=? and userpwd=?"; 
    应该是
    string sql = "select count(*) from admin where username= '"+loginName+"' and userpwd='"+loginPwd+"'"; 
      

  4.   

    根据错误信息看,就是说selAllNews can't return a result 
    这个储存过程不能返回一个结果。
      

  5.   

    按照PHP的现象.你分析下MySQLConnection conn对象。这里也有好多参数.看看哪些对应PHP里的multi-results参数,就是你说的那个数字.
      

  6.   

    问题解决,我改用了mysql出的 MySQL Connector/NET 来连接数据库,这个与MySqlDriverCS功能差不多,里面的对象基本上一样
    但是MySQL Connector/NET 能比较好的支持存储过程附上其调用存储过程的主要代码给大家参考,我觉得很有用
    (来源:http://dev.mysql.com/doc/refman/5.1/zh/connectors.html 下‘26.2.4.4.3. 从MySQL Connector/NET调用存储程序’)
    MySql.Data.MySqlClient.MySqlConnection conn;
    MySql.Data.MySqlClient.MySqlCommand cmd;conn = new MySql.Data.MySqlClient.MySqlConnection();
    cmd = new MySql.Data.MySqlClient.MySqlCommand();conn.ConnectionString = "server=127.0.0.1;uid=root;" +
        "pwd=12345;database=test;";try
    {
        conn.Open();
        cmd.Connection = conn;    cmd.CommandText = "add_emp";
        cmd.CommandType = CommandType.StoredProcedure;    cmd.Parameters.Add("?lname", "Jones");
        cmd.Parameters("?lname").Direction = ParameterDirection.Input;    cmd.Parameters.Add("?fname", "Tom");
        cmd.Parameters("?fname").Direction = ParameterDirection.Input;    cmd.Parameters.Add("?bday", DateTime.Parse("12/13/1977 2:17:36 PM"));
        cmd.Parameters("?bday").Direction = ParameterDirection.Input;    cmd.Parameters.Add("?empno", MySqlDbType.Int32);
        cmd.Parameters("?empno").Direction = ParameterDirection.Output;    cmd.ExecuteNonQuery();    MessageBox.Show(cmd.Parameters("?empno").Value);
    }
    catch (MySql.Data.MySqlClient.MySqlException ex)
    {
        MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
          "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
      

  7.   

    驱动装了,只是刚开始我用的是MySQLDriverCS,后来改用了MySql connector /net