Asp.net &引用;对象引用未设置为对象的实例;在没有返回数据时引发

Asp.net &引用;对象引用未设置为对象的实例;在没有返回数据时引发,asp.net,sql-server,ado.net,sql-server-2008-r2,webforms,Asp.net,Sql Server,Ado.net,Sql Server 2008 R2,Webforms,我收到代码中的“对象引用未设置为对象实例”错误。我相信我理解为什么会发生这种情况,但我不知道如何避免它。这是我的密码: public string GetLastPost(int subCatId) { SqlConnection conn = null; string postDate = null; try { conn = new SqlConnection(); conn.ConnectionString = Configu

我收到代码中的“对象引用未设置为对象实例”错误。我相信我理解为什么会发生这种情况,但我不知道如何避免它。这是我的密码:

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查询不返回任何内容时才会发生这种情况。此方法运行多次,第一次运行时会正确运行,因为它返回一个项。但是第二次,因为它没有要返回的项,它抛出了我提到的错误

如何解决这个问题?

您可以这样使用

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

您可以这样使用

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


这将解决您的问题。。。替换
postDate=cmd.ExecuteScalar().ToString()带有

object postdate = cmd.ExecuteScalar();
if (postdate != null)
{
string getUserName = postdate.ToString();
}

这会解决你的问题。。。替换
postDate=cmd.ExecuteScalar().ToString()带有

object postdate = cmd.ExecuteScalar();
if (postdate != null)
{
string getUserName = postdate.ToString();
}
删除
ExecuteScalar()
上的
ToString()
,并检查是否返回空值。(首先将其放置在对象上)。删除
ExecuteScalar()
上的
ToString()
的可能重复项,并检查是否返回空值。(将其首先放置在对象上)。可能重复的