繁体   English   中英

在SQL查询中未将对象设置为对象的实例,空引用异常

[英]Object not set to an instance of an object in sql query, null reference exception

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

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发送到Server ..而不是作为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;

连接,交易等。所有其他地方都可以,但是我保证:)

在这种情况下, +运算符是字符串连接运算符。 票证是您班级的名称,尚不清楚您是否拥有同名的物业。 如果您确实拥有该名称的属性,

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

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

更新

作为类名,只有代码无法为我编译

如您所见,它根本不适合我编译。 当我写了一个同名的属性时。 它编译并构造了字符串,在Ticket所在的位置插入了一个空字符。

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

字符串仍然被构造

在这种情况下,您的字符串仍会被构造,并且在string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;处将得到无效的查询string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime; 这可能是造成您的问题的原因。 请使用抛出异常的屏幕截图进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM