在这种特殊情况下,我得到空引用异常,我无法解决它。
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;
连接,交易等..它在其他地方,但一切正常,我保证:)
答案 0 :(得分:0)
在这种情况下, + 运算符是字符串连接运算符。 Ticket 是您的类的名称,并且不清楚您是否具有相同名称的属性。如果您确实拥有该名称的财产,
string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;
上述行可能失败,因为Tiket
属性为null。而且,它的ToString()
可能对查询的FROM子句无效。
<强>更新强>
正如你所看到的,它根本不适合我。当我写一个同名的财产。它编译并构造了字符串,在Ticket中插入了一个空字符。
第二个屏幕截图显示了如果它是属性会发生什么。
在这种情况下,您的字符串仍然构建,您将在string upit = "SELECT * FROM " + Tiket + " " + " WHERE " + t.Korisnik.Ime;
行收到无效查询,这可能会导致您的问题。请使用屏幕截图显示异常被抛出的位置。