Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果datatable列值满足语句,则修改该列值_C#_Sql_Ado.net - Fatal编程技术网

C# 如果datatable列值满足语句,则修改该列值

C# 如果datatable列值满足语句,则修改该列值,c#,sql,ado.net,C#,Sql,Ado.net,我有一个datatable,其中包含以下列:用户名、密码和分数 我在完成测验(QuizForm)后得到分数,然后我应该使用用户名和密码登录,如果分数高于上一个,则保存分数 我这么做了,但我猜是错的 static public void SaveScore(string username, string score) { try { DatabaseConnection db = new DatabaseConnection(); db.Conn

我有一个datatable,其中包含以下列:用户名、密码和分数

我在完成测验(QuizForm)后得到分数,然后我应该使用用户名和密码登录,如果分数高于上一个,则保存分数

我这么做了,但我猜是错的

static public void SaveScore(string username, string score) 
{
    try 
    {
        DatabaseConnection db = new DatabaseConnection();
        db.Connection.Open();

        SqlCommand cmdWrite = db.GetCommand("insert into Users(Username, Password) values(username, password)");
        SqlCommand cmdRead = db.GetCommand("select * from Users");

        SqlDataReader reader = cmdRead.ExecuteReader();
        if (reader.HasRows) {
            while (reader.Read()) {
                if (username == reader["Username"].ToString() && int.Parse(score) > Convert.ToInt32(reader["Score"])) {
                    cmdWrite.Parameters.AddWithValue(@"Score", score);
                }
            }
        }
        db.Connection.Close();


    }
    catch (SqlException ex) {
        MessageBox.Show(ex.Message);
    }
}
这不是在记分。 有没有办法解决这个问题

另外,GetCommand看起来像这样:

public SqlCommand GetCommand(string CommandText){
        var cmd = new SqlCommand();
        cmd.Connection = Connection;
        cmd.CommandText = CommandText;
        return cmd;
    }
SqlCommand cmdWrite = db.GetCommand("insert into Users(Username, Password, Score) values(@username, @password, @score)");

您的cmdWrite不包括分数列:

SqlCommand cmdWrite = db.GetCommand("insert into Users(Username, Password) values(username, password)");
应该是这样的:

public SqlCommand GetCommand(string CommandText){
        var cmd = new SqlCommand();
        cmd.Connection = Connection;
        cmd.CommandText = CommandText;
        return cmd;
    }
SqlCommand cmdWrite = db.GetCommand("insert into Users(Username, Password, Score) values(@username, @password, @score)");
然后:

cmdWrite.Parameters.AddWithValue("@score", score);
解决了这个问题

这是:

static public void SaveScore(string username, string score) {
        try {
            DatabaseConnection db = new DatabaseConnection();
            db.Connection.Open();
            var cmd = db.GetCommand("SELECT Score FROM Users WHERE Username = username");
            var oldScore = Convert.ToInt32(cmd.ExecuteScalar());
            var value = Int32.Parse(score);
            if (oldScore < value) {
                cmd = db.GetCommand("UPDATE Users SET Score = @score WHERE Username = @username AND Score < @score");
                cmd.Parameters.AddWithValue("@score", value);
                cmd.Parameters.AddWithValue("@username", username);
                MessageBox.Show("New High Score Was Saved","Congratulations",MessageBoxButtons.OK);
            }
            else {
                MessageBox.Show("High Score Wasn't Reached. Try Again", "Game Over", MessageBoxButtons.OK);
            }

            cmd.ExecuteNonQuery();
            db.Connection.Close();                
        }
        catch (SqlException ex) {
            MessageBox.Show(ex.Message);
        }
    }
静态公共void保存分数(字符串用户名、字符串分数){
试一试{
DatabaseConnection db=新建DatabaseConnection();
db.Connection.Open();
var cmd=db.GetCommand(“从Username=Username的用户中选择分数”);
var oldScore=Convert.ToInt32(cmd.ExecuteScalar());
var值=Int32.Parse(分数);
如果(旧分数<值){
cmd=db.GetCommand(“更新用户设置分数=@Score,其中用户名=@Username和分数<@Score”);
cmd.Parameters.AddWithValue(“@score”,value);
cmd.Parameters.AddWithValue(“@username”,username);
显示(“保存了新的高分”,“恭喜”,MessageBox按钮。确定);
}
否则{
显示(“未达到高分。重试”,“游戏结束”,MessageBox按钮。确定);
}
cmd.ExecuteNonQuery();
db.Connection.Close();
}
catch(SqlException-ex){
MessageBox.Show(例如Message);
}
}