0

こんにちはみんな!!! Asp.net で 1 つの C# クラスと 1 つのハンドラーを作成しました。私の 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();

EDIT:、ExecuteNonQueryなどのDMLステートメントに使用されUPDATEますINSERT

例外処理に関する@Jonのコメントを読んでください。

于 2013-01-30T13:53:20.420 に答える
0

少なくとも2つの問題があります。最初の問題は、例外を飲み込んでいることです。これはおそらくあなたの問題を引き起こします。例外が発生した場合は、リーダーから読み取ることができず、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 に答える
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 に答える