执行ExecuteScalar函数时,对象引用未设置为对象的实例

时间:2013-12-01 21:24:35

标签: sql c#-4.0 exception stored-procedures sql-server-2012

这是我执行返回单个字符串值的查询的函数的定义。

public static string ExecuteScalar(DbCommand comm)
{
   String value = "";
 try
 {
   comm.Connection.Open();
   **value = comm.ExecuteScalar().ToString();**//exception occurs here.
 }                                             //It says "Object reference is not set instance of an object"
 catch (Exception ex)
 {
   Console.WriteLine(ex);
 }
 finally
 {
   comm.Connection.Close();
 }
 return value;
}

由函数执行。

public static string selectentries(string id)
{
    string value = "";
    DbCommand comm = GenericDataAccess.CreateCommand();
    comm.CommandText = "SelectEntries";

    DbParameter param = comm.CreateParameter();
    param.ParameterName = "@id";
    param.Value = id;
    param.DbType = DbType.String;
    comm.Parameters.Add(param);
    try
    {
        value = GenericDataAccess.ExecuteScalar(comm);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
    return value;
}

存储过程是一个查询

SELECT name from Credentials where student_id=@id.

其中name是数据库中的varchar(30),而@id是传递给存储过程的字符串值。

如何纠正这个问题?

1 个答案:

答案 0 :(得分:0)

错误告诉您以下方法返回null:

comm.ExecuteScalar();

当您尝试调用.ToString()时会导致异常:

comm.ExecuteScalar().ToString();

如果查询未返回任何行,则会发生这种情况。例如。因为数据库中没有与提供的id匹配的学生。