我有一个为计时器设置的全局变量“I”,我正在创建的程序让用户玩游戏关卡并将他们的关卡时间与其他用户一起存储在数据库中。这是我已经拥有的。
public static class Global
{
public static int I = 0;
}
^ 这是定时器的全局变量。
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Adam\Documents\Data2.mdf;Integrated Security=True;Connect Timeout=30");
SqlDataAdapter sad = new SqlDataAdapter("Select Count(*) From Login where Username= '" + txtUsername.Text + "' and Password='" + txtPassword.Text + "'", con);
SqlCommand cmd = new SqlCommand("INSERT INTO HighScore (Username, Score) VALUES(@Username,@Score)", con);
DataTable dt = new DataTable(); //empty table
sad.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
con.Open();
cmd.Parameters.AddWithValue("@USERNAME", txtUsername.Text);
cmd.Parameters.AddWithValue("@Score", Global.I);
}
else // else it will display this error
{
MessageBox.Show("Please enter the correct login details");
}
^^ 这是游戏结束屏幕的代码,如您所见,我已经尝试使用 Global.I 和 addwithvalue @Score,它位于我数据库的 HighScore 表中。 现在,当我单击该按钮时,它不会向数据库写入任何内容,但是当我尝试保存时我没有收到任何错误,这就是我感到困惑的原因。 任何帮助将不胜感激,谢谢。
最佳答案
在执行任何命令之前,您首先必须打开连接。您在调用 Fill()
之后打开连接!!。您还必须执行 cmd
。尝试:
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Adam\Documents\Data2.mdf;Integrated Security=True;Connect Timeout=30");
SqlDataAdapter sad = new SqlDataAdapter("Select Count(*) From Login where Username= '" + txtUsername.Text + "' and Password='" + txtPassword.Text + "'", con);
SqlCommand cmd = new SqlCommand("INSERT INTO HighScore (Username, Score) VALUES(@Username,@Score)", con);
con.Open();
cmd.Parameters.AddWithValue("@USERNAME", txtUsername.Text);
cmd.Parameters.AddWithValue("@Score", Global.I);
DataTable dt = new DataTable(); //empty table
sad.Fill(dt);
cmd.ExecuteNonQuery();
同样令人钦佩的是,您知道如何正确使用参数,但是您只在一种情况下使用它们,而不是在两种查询中都使用它们。
关于c# - 将计时器值存储在数据库中? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37437669/