2017-03-06 126 views
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,所以會引發異常。有什麼替代方法可以使用?

+0

暫時使用「object val = cmd.ExecuteScalar();」只是爲了看看它是否是一個不同的數據類型。 – granadaCoder

+0

臨時將您的sql更改爲「從用戶記錄中選擇MAX(ID)」以查看它是否因爲您沒有與where子句匹配的行。甚至臨時改變爲「選擇333作爲假價值」 – granadaCoder

+0

'(從用戶記錄中選擇MAX(ID))'沒有綁定到用戶名btw,所以除非'Username ='「+ LoginInfo.UserID +」''實際上有'所有*行的MAX(ID)',什麼都不會匹​​配。 –

回答

0

我想你想爲此Username最新的ID,那麼你的查詢是錯誤的。用途:

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; 

您的查詢返回的最大值標識符如果這個記錄accidentially有搜索Username

相關問題