0

私は次のクエリを持っています

SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'ptbs.ms_karyawan'

それらをmysql wampで実行すると、2列が返されます

しかし、C# を使用して上記のクエリを実行すると、-1 列が返されます。コードは次のとおりです。

  private void button1_Click(object sender, EventArgs e)
    {
        int table = dbc.Count("ptbs.ms_karyawan");
        msg.Sukses("Jumlah table adalah :"+table, "Login");
    }

そしてここにdbc.count()コードがあります

  public int Count(string table_name)
    {
        string query = "SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '"+table_name+"'";
        int table = 0;

        if (OpenConnection() == true)
        {
            //create mysql command
            MySqlCommand cmd = new MySqlCommand();

            //Assign the query using CommandText
            cmd.CommandText = query;

            //Assign the connection using Connection
            cmd.Connection = connection;

            //Execute query
            table = cmd.ExecuteNonQuery();

            //close connection
            this.CloseConnection();                             
        }
        return table;
    }

同じクエリを使用しているのに、なぜ彼らは異なる値を返したのですか? 私は何を間違えましたか?

4

2 に答える 2

3

Executescalarメソッドを実行する必要があります

var retVal = cmd.Executescalar(); 
table = Convert.ToInt32(retVal);

ExecuteNonQuery影響を受けた行数のみを返します。

ただしExecutescalar、クエリによって返される結果セットの最初の行の最初の列を返します

ExcureScalar から返される値のキャストに関する詳細情報が必要な場合は、以下の SO 回答を確認してください。

Int32.TryParse() または (int?)command.ExecuteScalar()

于 2013-05-07T03:52:41.160 に答える
0

クエリを実行するために MySQLClient.ExecuteNonQueryを使用していますが、 ではなくまたは などのステートメントを実行するExecuteNonQueryために使用されます。このため、どの行にも影響を与えず、結果は -1 になります。fromの値を読み取ることができる結果セットが返されるような方法でクエリを実行する必要があります。INSERTUPDATESELECTcount ( * ) COLUMN_NAME

于 2013-05-07T03:53:23.153 に答える