这是我执行返回单个字符串值的查询的函数的定义。
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是传递给存储过程的字符串值。
如何纠正这个问题?
答案 0 :(得分:0)
错误告诉您以下方法返回null:
comm.ExecuteScalar();
当您尝试调用.ToString()时会导致异常:
comm.ExecuteScalar().ToString();
如果查询未返回任何行,则会发生这种情况。例如。因为数据库中没有与提供的id匹配的学生。