【问题标题】:Object reference not set to an instance of an object when ExecuteScalar function is executed执行 ExecuteScalar 函数时,对象引用未设置为对象的实例
【发布时间】:2013-12-17 12:29:07
【问题描述】:

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

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 是传递给存储过程的字符串值。

如何解决这个问题?

【问题讨论】:

  • 您是否尝试调试过您的代码?

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


【解决方案1】:

错误是告诉你下面的方法返回了null:

comm.ExecuteScalar();

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

comm.ExecuteScalar().ToString();

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

【讨论】:

  • 我调试了代码,发现问题是 SQL 查询,我在错误的表上应用了它。我没想到问题会在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多