2014-02-03 4 views
0

Здравствуйте, я пытаюсь изменить мой klientTableAdapter.CommanText, который находится в TableAdapter динамически создается DataSet называется DSSchema - это динамически создается при создании отчета с помощью ReportViewer.Edit TableAdapter CommandText получение Null ReferenceException

string sqlcomEvent = "SELECT akce,name,surname,rodcis,(Cast([street] as nvarchar(MAX)) + ', '+ city + ', ' + ZIP) AS Adresa, odjezd, sitting, rocnik FROM dbo.klient WHERE ([email protected]"; 

for (int a = 0; a < CommonEvents.Count(); a++) 
{ 
    sqlcomEvent += " OR event='" + CommonEvents[a]+"'"; 
} 
sqlcomEvent += ")AND [email protected] ORDER BY SITTING"; 
// TODO: This line of code loads data into the 'dtourDataSet.klient' table. You can move, or remove it, as needed. 
this.klientTableAdapter.Adapter.SelectCommand.CommandText = sqlcomEvent ;    
this.klientTableAdapter.Fill(this.dtourDataSet.klient,zajezd,klientClass.Rocnik()); 
this.reportViewer1.RefreshReport(); 

Я считаю, что NullReferenceException поднимается, потому что нету, прежде чем объявил klientTableAdapter, но когда я добавить эту строку var klientTableAdapter = new klientTableAdapter(); я получаю сообщение об ошибке:

tours.TiskSchemaDoprava.klientTableAdapter is a field; but is used like a type

ли кто-нибудь, пожалуйста, помогите мне решить это?

Это прекрасно работает для меня, но я не уверен, если нет более разумного способа сделать это?

this.klientTableAdapter.Fill(this.dtourDataSet.klient,zajezd,klientClass.Rocnik()); 
this.klientTableAdapter.Adapter.SelectCommand.CommandText = sqlcomZaj; 
this.klientTableAdapter.Fill(this.dtourDataSet.klient, zajezd, klientClass.Rocnik()); 
this.reportViewer1.RefreshReport(); 

ответ

0

У вас есть поле:

this.klientTableAdapter 

типа это имеет такое же имя, как имя поля. Поэтому, когда вы говорите new klientTableAdapter(), он не знает, ссылаетесь ли вы на тип поля, и поскольку поле определено в классе, оно выбирает поле: и вы не можете «новое» поле. Самое простое - переименовать поле и позволить Visual Studio позаботиться о его переименовании везде, где он используется. Или сделайте это с типом и укажите стандартное имя с капиталом на лицевой стороне KlientTableAdapter, чтобы компилятор мог устранить поле из своего типа.