0

我是 C# 的初学者,但我必须为朋友制作一个软件。它用于生成数字(它们在 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)单击按钮 - 它进行更新(不带 SELECT)(它将 used = 1 设置为数据库中的数字,在标签中) 2)再次单击按钮 - 它只进行SELECT(它从数据库中获取下一个数字,并使用 used = 0)3)点击按钮 - 它只做更新(没有选择)4)点击按钮 - 再次从第2步到第3步

请问,你能告诉我,我怎样才能一键完成这两项操作(更新和选择)?

感谢和抱歉我的英语不好。

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 回答