簡體   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