0
我試圖在使用C#的Visual Studio上製作一個簡單的內存遊戲。這個遊戲必須保留數據庫中的一些用戶記錄。我的數據庫不是空的。這是我的代碼部分:即使數據庫中有數據,ExecuteScalar()也會返回NULL
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,所以會引發異常。有什麼替代方法可以使用?
暫時使用「object val = cmd.ExecuteScalar();」只是爲了看看它是否是一個不同的數據類型。 – granadaCoder
臨時將您的sql更改爲「從用戶記錄中選擇MAX(ID)」以查看它是否因爲您沒有與where子句匹配的行。甚至臨時改變爲「選擇333作爲假價值」 – granadaCoder
'(從用戶記錄中選擇MAX(ID))'沒有綁定到用戶名btw,所以除非'Username ='「+ LoginInfo.UserID +」''實際上有'所有*行的MAX(ID)',什麼都不會匹配。 –