0

コードで「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。私はこれがなぜ起こるのか理解していると思いますが、それを回避する方法がわかりません。これが私のコードです:

public string GetLastPost(int subCatId)
{
    SqlConnection conn = null;
    string postDate = null;
    try
    {
        conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
        conn.Open();

        SqlCommand cmd = new SqlCommand();

        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "forum_GetLastPostDate";
        cmd.Parameters.Add("@SubCategoryId" , subCatId);
        postDate = cmd.ExecuteScalar().ToString();
    } 

これは私のSQLクエリです:

SELECT TOP 1 PostDate
FROM forum_posts
WHERE forum_posts.SubcategoryId = @SubCategoryId
ORDER BY PostId desc

エラーは次の行によってスローされます:

postDate = cmd.ExecuteScalar().ToString();

デバッグ中に、SQLクエリが何も返さない場合にのみこれが発生することに気付きました。このメソッドは複数回実行されますが、最初に実行すると、アイテムが返されるため、正しく実行されます。しかし、2回目は、返すアイテムがないため、前述のエラーがスローされます。

どうすればこの問題を解決できますか?

4

2 に答える 2

4

このように使用できます

   var data= cmd.ExecuteScalar();
   if(data!=null)
         postDate =data.ToString();

詳細

ExecuteScalar が NullReferenceException をスローする

于 2013-01-02T16:16:30.403 に答える
0

これで問題が解決します...に置き換えpostDate = cmd.ExecuteScalar().ToString();ます

object postdate = cmd.ExecuteScalar();
if (postdate != null)
{
string getUserName = postdate.ToString();
}
于 2013-01-02T17:01:05.080 に答える