0

私は C# の初心者ですが、友人のために 1 つのソフトウェアを作成する必要があります。数値を生成するためのものです(それらはmysqlにあります)。ラベルとボタンに番号を入れています。このボタンは、MySQL から次の番号を生成するためのものです (使用されなかったデータベースから番号を選択します)。私のコード:

private void button1_Click(object sender, EventArgs e)
        {

            string input = label1.Text.Trim();
            string conn = "server=46.28.110.147;user=______;password=________;database=________;";
            MySqlConnection myconn = new MySqlConnection(conn);
            string sql = "SELECT numbers FROM domestic WHERE used=0 ORDER BY numbers LIMIT 1";
            string sq2 = "UPDATE domestic SET used = 1 WHERE numbers = '" + label1.Text +"'";
            MySqlDataAdapter da = new MySqlDataAdapter(sql, myconn);
            MySqlCommand cmd = new MySqlCommand(sq2, myconn);
            DataTable dt = new DataTable();
            da.Fill(dt);

                myconn.Open();    
                cmd.ExecuteNonQuery();    
                myconn.Close(); 

                label1.Text = dt.Rows[0][0] + "";

        }

問題は、ボタンをクリックしたときです。1) ボタンをクリック - UPDATE ( SELECT なし) を作成します (データベース内の番号に used = 1 を設定し、ラベルに含まれています) 2) ボタンをもう一度クリック - SELECTのみを作成します(データベースから used = を使用して次の番号を取得します) 0) 3) ボタンをクリック - UPDATEのみを行います ( SELECT なし) 4) ボタンをクリック - ステップ 2 から 3 までの AGAIN

ワンクリックで両方の操作 (UPDATE と SELECT) を実行するにはどうすればよいですか?

私の悪い英語に感謝し、申し訳ありません。

4

2 に答える 2

1

あなたのコードは、現在次のように動作しているように見えます。

  1. SELECT定数 SQL クエリを使用してステートメントを定義します。
  2. UPDATEラベル テキストの内容を使用してステートメントを定義します (おそらく空ですか?)
  3. データテーブルにMySqlDataAdapter. データベースから最初に利用可能な番号を回復している必要があります。
  4. 接続を開き、更新を実行します。
  5. ポイント 3 で埋められた最初のデータ行の最初の列を復元します。

この場合の問題は、ソリューションに到達するためにコードを混合していることだと思います。これを試して:

  1. SELECT定数 SQL クエリを使用してステートメントを定義します。
  2. データテーブルに MySqlDataAdapter を入力します。
  3. ポイント 2 に入力された最初のデータ行の最初の列を復元し、値をラベル テキストに入力します。
  4. ラベル テキストの内容を使用してステートメントを定義UPDATEします (今回は、最後の手順で復元された数値を持っています。
  5. 接続を開き、アップデートを実行します。

何かのようなもの...

private void button1_Click(object sender, EventArgs e)
{
    string input = label1.Text.Trim();
    string conn = "server=46.28.110.147;user=______;password=________;database=________;";
    MySqlConnection myconn = new MySqlConnection(conn);
    string sql = "SELECT numbers FROM domestic WHERE used=0 ORDER BY numbers LIMIT 1";
    MySqlDataAdapter da = new MySqlDataAdapter(sql, myconn);
    DataTable dt = new DataTable();
    da.Fill(dt);

    label1.Text = dt.Rows[0][0] + "";   // Recovers the value and puts into label.

    MySqlCommand cmd = new MySqlCommand(sq2, myconn);
    string sq2 = "UPDATE domestic SET used = 1 WHERE numbers = '" + label1.Text +"'";
    myconn.Open();
    cmd.ExecuteNonQuery();              // Updates database to set used = 1 for recovered number.
    myconn.Close();
}
于 2013-05-24T18:39:57.933 に答える
0

これを試して:

private void button1_Click(object sender, EventArgs e)
{
    string input = label1.Text.Trim();
    string conn = "server=46.28.110.147;user=______;password=________;database=________;";
    string sql = "SELECT numbers FROM domestic WHERE used=0 ORDER BY numbers LIMIT 1; UPDATE domestic SET used = 1 WHERE numbers = @numbers";
    MySqlConnection myconn = new MySqlConnection(conn);
    MySqlCommand cmd = new MySqlCommand(sql, myconn);
    MySqlDataAdapter da = null;
    DataSet ds = null;
    DataTable dt = null;

    cmd.Parameters.Add("numbers", SqlDbType.VarChar, 50).Value = input;

    da = new MySqlDataAdapter(cmd);
    ds = new DataSet();
    da.Fill(ds);

    if (ds.Tables.Count > 0) {
        if (ds.Tables(0).Rows.Count > 0) {
            dt = ds.Tables(0);
            label1.Text = dt.Rows(0)(0) + "";
        }
    }
}
于 2013-05-24T18:39:41.937 に答える