0

私は C# で ComboBox のパラメーターを使用してデータベースのインデックス番号を取得するスクリプトを作成しました。

private int category(string id) {
        int identity = 0;
        try
        {
            MySqlConnection conn = new MySqlConnection(connection.mysqlconnectionbuilder());
            conn.Open();
            MySqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT kategori.no FROM kategori WHERE kategori.kategori = @id";
            cmd.Parameters.AddWithValue("@id", id);
            cmd.CommandType = CommandType.Text;
            identity = cmd.ExecuteNonQuery();
            conn.Close();
        }
        catch (MySqlException msqe)
        {
            Console.Write(msqe.ToString());
        }
        return identity;
    }

名前の例に基づいてインデックス番号を取得したい。"Hollywood Movie" --> ID : 2 (DB 内) 上記のスクリプトの結果は -1 です。

それを解決する方法は?前もって感謝します。

4

2 に答える 2

2

ExecuteScalar()単一の値を取得する場合に使用します。

identity = Convert.ToInt32(cmd.ExecuteScalar());
于 2012-12-31T05:06:08.630 に答える
0

ExecuteNonQueryは、影響を受けた行の数を返します

挿入、更新、または削除に使用されます。影響を受ける行数を示す整数を返します。

したがって、クエリによって返される結果セットの最初の行の最初の列を返すExecuteScalarを使用する必要があります

「UPDATE、INSERT、および DELETE ステートメントの場合、戻り値はコマンドによって影響を受ける行の数です。他のすべてのタイプのステートメントの場合、戻り値は -1です。ロールバックが発生した場合、戻り値も -1 です。 "

identity = Int.Parse(cmd.ExecuteScalar());
于 2012-12-31T05:12:53.233 に答える