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则显示徽标......
答案 0 :(得分: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;
}
此外,请注意破折号提供的答案。我通常会将这个添加到我的答案中,并且正在进行中,但看到了他的补充。
关于设置BackgroundImage
的说明 - 您需要使用Layout
和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;
根据您的图片,上述设置可能不正确。
答案 1 :(得分: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;
}
}
}
如果您要进行此类数据访问,我建议parameterizing您的查询,并使用“using”语句。
第一个将有助于防止SQL注入攻击,而第二个将确保在您离开各个块的范围时处理非托管资源。