【问题标题】:Object reference not set to an instance of an object (property)对象引用未设置为对象(属性)的实例
【发布时间】:2013-12-09 08:37:46
【问题描述】:

我在 WCF 接口中有一个属性

string DBStatus(string Instance,string Asset,string Type);

[DataContract]
public class DatabaseDetails
{
    [DataMember]
    public string[] DBStatus { get; set; }
}

并在类中实现以下方法

public string DBStatus(string Instance, string Asset, string Type)
{
    DatabaseDetails DbDetails = new DatabaseDetails();
    int DBStatus = 0;
    using (SqlConnection SqlConn = new SqlConnection())
    {
        try
        {
            //SqlConn.ConnectionString = "Data Source=" + ServerName + "Initial Catalog=" + DBName + "User id=" + UserId + "Password=" + Pwd;
            SqlConn.ConnectionString = "server=" + ServerName + ";database=" + DBName + ";UID=" + UserId + ";PWD=" + Pwd;
            SqlConn.Open();

            DbDetails.DBStatus[DBStatus] = "Online";
            DbDetails.DbInstance[DBStatus] = Instance;
            DbDetails.AssetName[DBStatus] = Asset;
            DBStatus++;
            //json = "Online";
        }
        catch (Exception e)
        {
            json = "Offline";
        }
    }

}

Getting Object reference error @ Line : DbDetails.DBStatus[DBStatus] = "Online"; 我在使用它之前已经初始化了对象。 但不知道哪里做错了。

【问题讨论】:

  • DBStatus 是一个 int 变量吗?你定义了吗。说真的,您的代码充满了DBStatus 变量、函数、属性。只是建议您需要查看变量名而不是使用无意义的变量名
  • DBStatus 是其声明的 int 变量
  • I have initialised the object before using it.,不,你没有。
  • 在这里,第 2 行:DatabaseDetails DbDetails = new DatabaseDetails(); @DBStatus(字符串实例,字符串资产,字符串类型)
  • NullReferenceException 的几乎所有情况都是相同的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。

标签: c# wcf nullreferenceexception


【解决方案1】:

我不知道你为什么在这里需要一个数组,但你必须在赋值之前初始化它。您还必须说明数组大小。我假设 DBStatus 是一个整数。您还应该初始化DbInstanceAssetName 属性。

public string DBStatus(string Instance, string Asset, string Type)
{
    DatabaseDetails DbDetails = new DatabaseDetails 
                               { 
                                   DBStatus = new string[DBStatus + 1]
                                   //initialize DbInstance and AssetName too 
                               };

    using (SqlConnection SqlConn = new SqlConnection())
    {
        try
        {
            //SqlConn.ConnectionString = "Data Source=" + ServerName + "Initial Catalog=" + DBName + "User id=" + UserId + "Password=" + Pwd;
            SqlConn.ConnectionString = "server=" +ServerName+ ";database=" +DBName+ ";UID=" +UserId+ ";PWD="+Pwd ;
            SqlConn.Open();

            DbDetails.DBStatus[DBStatus] = "Online";
            DbDetails.DbInstance[DBStatus] = Instance;
            DbDetails.AssetName[DBStatus] = Asset;
            DBStatus++;
            //json = "Online";
        }
        catch (Exception e)
        {
            json = "Offline";
        }
    }

}

【讨论】:

  • 感谢您的解决方案
【解决方案2】:

虽然您的代码非常混乱,但一种猜测是您需要初始化字符串数组。

DbDetails.DBStatus = new string[3];

DbDetails.DBStatus[DBStatus] = "Online";
DbDetails.DbInstance[DBStatus] = Instance;
DbDetails.AssetName[DBStatus] = Asset;

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多