0

嗨伙计们!我在 Asp.net 中创建了一个 C# 类和一个处理程序。在我的 C# 文件中,我创建了一个函数,如下所示:

public MySqlDataReader Consulta(String sql){

    String error="";

    try 
    {

        string connectionString = "Server=*****;Port=3306;Database=db;UID=*****;Pwd=****;pooling=false";
        MySqlConnection conn;
        conn = new MySqlConnection(connectionString);
        conn.Open();

        //string s = "select empid,empname,authcode from authcode";
        MySqlCommand cmd = new MySqlCommand(sql,conn);

        //cmd.CommandText = s;
        cmd.ExecuteNonQuery();

        rs =cmd.ExecuteReader();

        } 
        catch (Exception e) 
        {
            //error = e.getMessage();
        }

        return (rs);
}

在我的处理程序文件中,我正在调用此函数,这是我的代码...

MySqldataReader rs = conexiondb.Consulta(strQuery);

total = conexiondb.countRec("price", "processeddata_table");

string json;
json = json + "{\n";
json = json + " \"page\":\""+intpage+"\",\n";
json = json + "\"total\":"+total_pages+",\n";
json = json + "\"records\":"+total+",\n";
json = json + "\"rows\": [";
rc =false;

while(rs.Read()){

    if(rc){
        json = json + ",";
    }
    json = json + "\n{";
    json = json + "\"price\":\"" + Convert.ToInt32(rs["price"]) + "\",";
    json = json + "\"cell\":[" + Convert.ToInt32(rs["price"]) + "";
    json = json + ",\"" + Convert.ToString(rs["username"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["ordinal"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["authcode"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["extension"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["trunk"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["dialnumber"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["dialdate"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["dialtime"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["duration"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["destination"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["price"]) + "\"";
    json = json + ",\"" + Convert.ToString(rs["toc"]) + "\"]";
    json = json + "}";

    rc=true;
}
json = json +"]\n";

json = json +"}";

HttpContext.Current.Response.Write(json);

但是 datareader 没有读取它总是返回 false 的记录。请大家帮我解决问题。

4

3 回答 3

0

去掉这行代码 cmd.ExecuteNonQuery();

编辑:ExecuteNonQuery用于 DML 语句,例如UPDATE, INSERT

阅读@Jon 关于异常处理的评论。

于 2013-01-30T13:53:20.420 回答
0

可能您的问题源于此局部变量

MySqlConnection conn;

当您从 Consulta 方法退出时,此变量将被破坏并且基础连接已关闭。这将使您的 MySqlDataReader 无法使用,因为它需要打开的连接

我将重构您的代码,以这种方式删除对 Consulta 的调用:

string sql = "your SELECT command here";
string connectionString = "Server=localhost;Port=3306;Database=projecttt;" +
                         "UID=root;Pwd=techsoft;pooling=false";

using(MySqlConnection conn = new MySqlConnection(connectionString))
{
     conn.Open();
     using(MySqlCommand cmd = new MySqlCommand(sql,conn))
     {
          using(MySqlDataReader rs =cmd.ExecuteReader())
          {
               total = conexiondb.countRec("price", "processeddata_table");

               string json;
               json = json + "{\n";
               json = json + " \"page\":\""+intpage+"\",\n";
               json = json + "\"total\":"+total_pages+",\n";
               json = json + "\"records\":"+total+",\n";
               json = json + "\"rows\": [";
               rc =false;
               while(rs.Read())
               {
                  .....
               }
           }
       }
   }
于 2013-01-30T13:54:13.537 回答
0

您至少有两个问题,第一个是您正在吞噬任何异常。这可能会导致您的问题。如果出现异常,您很可能无法从阅读器中读取,这将导致您的 while 循环永远不会执行。有一个空的捕获是一个警告是有原因的

其次,您正在尝试同时执行 NonQuery(不查询数据的命令)和使用同一阅读器的查询。我不知道这是否会导致异常,但至少没有理由两者都做。您可以删除这两个问题

public MySqlDataReader Consulta(String sql){
            string connectionString = "Server=***;Port=3306;Database=****;UID=***;Pwd=****;pooling=false";
   var conn = new MySqlConnection(connectionString);
   conn.Open();

   var cmd = new MySqlCommand(sql,conn);
   var rs =cmd.ExecuteReader();
   return (rs);
}
于 2013-01-30T14:18:18.570 回答