对象未设置为sql查询中的对象实例,null引用异常

时间:2017-06-22 22:41:24

标签: c# sql

在这种特殊情况下,我得到空引用异常,我无法解决它。

public class Tiket
{
    private Korisnik korisnik;
    public Korisnik Korisnik
    {

        get { if (korisnik == null)
            {
                korisnik = new Korisnik();
            }
            return korisnik; }
        set { korisnik = value; }
    }
}

在内部表单中我将值插入文本框并将其发送到处理数据库的方法(它更复杂,但我试图使其变得简单):

Tiket t = new Tiket();
t.Korisnik.Ime = txtImeKorisnika.Text;
thatMethod(t);

所以上面,我在为t.Korisnik.Ime分配值时没有得到null引用异常,但是在Inside方法中我得到一个:

string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;

与此主题相关的额外问题: 我在尝试从数据库向这些字段添加值时遇到同样的问题,这些字段也是Tiket中的类属性。

tikeet.Korisnik.JMBG = red[5].ToString();
tikeet.Radnik.SifraRadnika = Convert.ToInt32(red[6]);

我知道为什么会这样,但我不知道如何在这里初始化Korisnik,Radnik。

编辑:我希望现在有所帮助,所以你可以帮助我! 我有客户端服务器应用程序,我发送Tiket到服务器..它作为OpstiDomenskiObjekat(而不是Tiket)发送到方法我现在有问题。

OpstiDomenskiObjekat是界面,所以我可以有一个或几个方法来处理我需要的许多类似的东西。

 public List<OpstiDomenskiObjekat> vratiZaUslovJedanPlus(OpstiDomenskiObjekat odo)
    {

        string upit = "SELECT * FROM " + odo.tabela + " " + " WHERE " + odo.uslovJedan;

        OleDbDataReader citac = null;
        OleDbCommand komanda = new OleDbCommand(upit, konekcija, transakcija);
        try
        {
            citac = komanda.ExecuteReader(); // **here is exception thrown**
            DataTable tabela = new DataTable();
            tabela.Load(citac);
            List<OpstiDomenskiObjekat> lista = new List<OpstiDomenskiObjekat>();
            foreach (DataRow red in tabela.Rows)
            {
                OpstiDomenskiObjekat pom = odo.napuni(red);
                lista.Add(pom);
            }
            return lista;
        }
        catch (Exception ex)
        {
            throw ex;
        }

//这是Tiket类中的实现

public string uslovJedan
    {
        get
        {
            return Korisnik.Ime;
        }
    }

//这应该在方法之后发生,我将根据需要使用List

List<Tiket> lista = Broker.dajSesiju().vratiZaUslovJedanPlus(odo).OfType<Tiket>().ToList<Tiket>();
        return lista;

连接,交易等..它在其他地方,但一切正常,我保证:)

1 个答案:

答案 0 :(得分:0)

在这种情况下, + 运算符是字符串连接运算符。 Ticket 是您的类的名称,并且不清楚您是否具有相同名称的属性。如果您确实拥有该名称的财产,

string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;

上述行可能失败,因为Tiket属性为null。而且,它的ToString()可能对查询的FROM子句无效。

<强>更新

As a class name only the code didn't compile for me

正如你所看到的,它根本不适合我。当我写一个同名的财产。它编译并构造了字符串,在Ticket中插入了一个空字符。

第二个屏幕截图显示了如果它是属性会发生什么。

The string is still constructed

在这种情况下,您的字符串仍然构建,您将在string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;行收到无效查询,这可能会导致您的问题。请使用屏幕截图显示异常被抛出的位置。