2017-03-06 9 views
0

私はゲームを作ろうとしています。このゲームにはデータベースが含まれています。ここに私のコードの一部です:SQLの検索条件としてmax(id)を使用するにはどうすればよいですか?

 string ConnectionString = @"Data Source =" + Application.StartupPath + @"\mydb.sdf"; 
     SqlCeConnection con = new SqlCeConnection(@"Data Source="Application.StartupPath + @"\mydb.sdf"); 

     var sql= @"SELECT Points FROM Userrecords WHERE ID = (SELECT MAX(ID) FROM Userrecords) AND Username = @UserName "; 
     SqlCeCommand cmd = new SqlCeCommand(sql, con); 
     cmd.Parameters.Add("@UserName", LoginInfo.UserID); 

     con.Open(); 

     var ob = cmd.ExecuteScalar(); 
       // Pointlbl.Text = (string)cmd.ExecuteScalar(); 

     //cmd.ExecuteNonQuery(); 
     con.Close(); 

問題は、私は適切にそのSELECTクエリを形成する方法がわからないということですので、コードは常にこの行にNULL例外をスロー終わる:var ob = cmd.ExecuteScalar();

型「System.Data.SqlServerCe.SqlCeException」の

未処理の例外は、選択クエリを形成するための最も正しい方法は何System.Data.SqlServerCe.dll

で発生しましたか?

+0

正確な例外は何ですか?スタックトレースとメッセージを確認できますか? –

+0

System.Data.SqlServerCe.dllで 'System.Data.SqlServerCe.SqlCeException'型の未処理の例外が発生しました。これは例外です.obの値にカーソルを置くと、値はNULLと表示されます。 –

+0

はい、.sdfファイルが実行可能ファイルと同じフォルダにあることを確信しています。 –

答えて

1

を返すと一致していないではないことができます:

SELECT TOP 1 Points 
FROM Userrecords 
WHERE Username = @UserName 
ORDER BY ID DESC 
+0

それは働いた!お手伝いありがとう。 –

+0

あなたの問題が解決してうれしいです! –

0

はあなたと句が副選択の内側に配置されなければならないことが考えられ

SELECT Points 
FROM Userrecords 
WHERE ID = (SELECT MAX(ID) FROM Userrecords 
      AND Username = @UserName) 

そうscaisEdgeのクエリが動作しない場合は、おそらく次のことを試して、適切な値

関連する問題