即使数据库中有数据,ExecuteScalar()也始终返回NULL

时间:2017-03-06 15:38:15

标签: c# mysql

我正在尝试使用C#在visual Studio上制作一个简单的记忆游戏。此游戏必须在数据库中保留一些用户记录。我的数据库不是空的。这是我的代码的一部分:

string ConnectionString = @"Data Source =" + Application.StartupPath + @"\mydb.sdf";

SqlCeConnection sqlConnection1 = new SqlCeConnection(@"Data Source=" +Application.StartupPath + @"\mydb.sdf");
System.Data.SqlServerCe.SqlCeCommand cmdt = new System.Data.SqlServerCe.SqlCeCommand(ConnectionString);
cmdt.CommandText = "insert into logs (Sessionid, score, Minutes, Hintcount, Errorcount, Level, Picname) values(@ID, @Score, @Minutes, @Hintcount, @Errorcount, 'Level 1', @Picname)";
cmdt.Connection = sqlConnection1;

sqlConnection1.Open();
{
    SqlCeCommand cmd = new SqlCeCommand("select ID from Userrecords where ID=(select MAX(ID) from Userrecords) and Username='" + LoginInfo.UserID + "'", sqlConnection1);

    cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;


    int id = (int)cmd.ExecuteScalar();

   cmdt.Parameters.AddWithValue("@Score", point);
   cmdt.Parameters.AddWithValue("@Minutes", time);
   cmdt.Parameters.AddWithValue("@Hintcount", hbuttoncount);
   cmdt.Parameters.AddWithValue("@Errorcount", errorcount);
   cmdt.Parameters.AddWithValue("@Picname", nameused2);
   cmdt.Parameters.AddWithValue("@ID", id);

   cmdt.UpdatedRowSource = UpdateRowSource.OutputParameters;
   cmdt.ExecuteNonQuery();
   sqlConnection1.Close();
}

我正在尝试使用executeScalar方法,以便从另一个表中检索会话ID。但它总是返回NULL,因此抛出异常。有什么选择我可以使用吗?

1 个答案:

答案 0 :(得分:0)

我认为你想要ID的最新Username,那么你的查询是错误的。使用:

var sql = @"SELECT MAX(ID) As Id 
            FROM Userrecords 
            WHERE Username = @UserName";
SqlCeCommand cmd = new SqlCeCommand(sql, sqlConnection1);
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = LoginInfo.UserID;

如果此记录意外地具有搜索的Username

,则您的查询返回了max-id