0
     MySqlConnection con = new MySqlConnection("host=db4free.net;user=*;password=*;database=*;");
    MySqlCommand xcmd = new MySqlCommand("SELECT x FROM members WHERE id='" + Login.idd + "';");
      xcmd.Connection = con;
        xint.Connection = con;
        DataTable dt = new DataTable();
        con.Open();
        xcmd.ExecuteNonQuery();
        int xx = (int)xcmd.ExecuteScalar();
        xcmd.Connection.Close();;
        xcmd.Dispose();
        x = xx;
        con.Close();
        if (x == 2)
        {
            button6.BackgroundImage = Properties.Resources.logo;
        }

我希望程序从数据库中读取 X 的值,将其添加到变量中,然后如果它等于 2 则显示徽标...

4

2 回答 2

0

使用ExecuteScalar,它更直接:

MySqlConnection con = new MySqlConnection("host=db4free.net;user=*;password=*;database=*;");
MySqlCommand xcmd = new MySqlCommand("SELECT x FROM members WHERE id='" + Login.idd + "';", con);

con.Open();
var x = (int)xcmd.ExecuteScalar();
con.Close();
if (x == 2)
{
    button6.BackgroundImage = Properties.Resources.logo;
}

此外,请注意dash提供的答案。我通常将其添加到我的答案中,并且正在处理中,但看到了他的添加。

还有一个关于设置的注释BackgroundImage- 你需要使用Layoutand Size。以下代码来自 MSDN:

// Specify the layout style of the background image. Tile is the default.
button1.BackgroundImageLayout = ImageLayout.Center;

// Make the button the same size as the image.
button1.Size = button1.BackgroundImage.Size;

根据您的图像,上述设置可能不正确。

于 2013-06-05T15:25:01.347 回答
0

在您的原始代码中,您有一些不需要的位;例如,DataTable、xint 命令和 ExecuteNonQuery(用于执行仅更新/插入/删除数据库的操作,例如,不返回结果)

using(MySqlConnection con = new MySqlConnection("host=db4free.net;user=*;password=*;database=*;"))
{
    using(MySqlCommand xcmd = new MySqlCommand("SELECT x FROM members WHERE id=@loginid;"))
    {
        xcmd.connection = con;
        xcmd.Parameters.AddWithValue("@loginid", Login.idd);
        con.Open();
        int x = Convert.ToInt32(xcmd.ExecuteScalar());
        //Do something with x
        if(x == 2)
        {
            button6.BackgroundImage = Properties.Resources.logo;
        }
    }
}

如果您打算进行这种类型的数据访问,我建议您参数化您的查询,并使用“使用”语句。

第一个将有助于防止 SQL 注入攻击,而第二个将确保在您离开各个块的范围时处置非托管资源。

于 2013-06-05T15:27:50.823 回答