尝试从数据库中检索时出错

时间:2021-02-17 12:41:44

标签: c# .net ado.net

我从 XSD 架构生成了三个类:

public partial class PathDetailsMessage {
    private MessageHeader messageHeaderField;

    public MessageHeader MessageHeader {
        get {
            return this.messageHeaderField;
        }
        set {
            this.messageHeaderField = value;
        }
    }
}


public partial class MessageHeader {
    private Recipient recipientField;

    public Recipient Recipient {
        get {
            return this.recipientField;
        }
        set {
            this.recipientField = value;
        }
    }
}


public partial class Recipient {
    private string valueField;

    public string Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}

当我尝试将 id 的值(数据库中的字符)放入medusa.MessageHeader.Recipient.Value 时,出现错误(见下文):

if (dr.HasRows)
{
  dr.Read();
  medusa.MessageHeader.Recipient.Value = Convert.ToString(dr["id"]);
  dr.Close();
}

我收到以下错误:

<块引用>
System.NullReferenceException: 'Object reference not set to an instance of an object.'

PathDetailsMessage.MessageHeader.get returned null.

我使用以下 SQL 字符串:

string sqlString = "SELECT id FROM view_otf WHERE id LIKE '%079%'";

id 列在数据库中是 CHAR。

我无法找到解决此问题的方法。

你能帮我吗?

谢谢。

LE:这 3 个类位于同一个 .cs 文件中。

LE2:medusa 是从 PathDetailsMessage.cs 文件初始化的对象,是从 XSD 模式创建的类<​​/p>

PathDetailsMessage medusa = new PathDetailsMessage();

1 个答案:

答案 0 :(得分:1)

我们缺少 medusa 初始化代码,但您应该这样做:

medusa.MessageHeader = new MessageHeader {
    Recipient = new Recipient()
};
medusa.MessageHeader.Recipient.Value = Convert.ToString(dr["id"]);

那是因为像 PathDetailsMessage 这样的类的初始化不会为 MessageHeader 属性设置任何值为 null 的值。这同样适用于 Recipient 属性。因此,通过上述初始化,您将有一些对象来存储值。