2013-10-08 3 views
0

У меня есть следующий метод, который использует для поиска текста в таблицеОшибка в SQL SELECT заявление

protected void fillGridView(int followingID, string text) 
    { 

     SqlCommand myCommand = new SqlCommand("select t.*,u.firstName,u.lastName,u2.firstName as afirstName,u2.lastName as alastName ,i.icon,ii.iconPath as taskIcon, iii.iconPath as seenIcon,f.fileName,f.fileID from tasks as t inner join users as u on u.userID=t.addedBy inner join users as u2 on u2.userID=t.attachTo inner join priorityIcons as i on t.priority=i.priorityID inner join icons as ii on t.status=ii.iconName inner join icons as iii on t.isNew=iii.iconName left join files as f on t.fileID=f.fileID where [email protected] and t.firstName LIKE '%asd%'"); 


     myCommand.Parameters.AddWithValue("@followingID", followingID); 
     myCommand.Parameters.AddWithValue("@text", text);    

     DBAccess db = new DBAccess(); 
     DataSet ds = db.select(myCommand); 

     SqlDataAdapter adapter = new SqlDataAdapter(); 

     tasksRepeater.DataSourceID = null; 
     tasksRepeater.DataSource = ds.Tables[0]; //Here the exception appear because the dataset ds is "null" 
     tasksRepeater.DataBind(); 
     tasksCounter(); 
    } 

И за исключением Message является «ссылка на объект не указывает на экземпляр объекта.»

но когда я обменивать SQL Statement выше со следующим один, код работает успешно

SqlCommand myCommand = new SqlCommand("select t.*,u.firstName,u.lastName,u2.firstName as afirstName,u2.lastName as alastName ,i.icon,ii.iconPath as taskIcon, iii.iconPath as seenIcon,f.fileName,f.fileID from tasks as t inner join users as u on u.userID=t.addedBy inner join users as u2 on u2.userID=t.attachTo inner join priorityIcons as i on t.priority=i.priorityID inner join icons as ii on t.status=ii.iconName inner join icons as iii on t.isNew=iii.iconName left join files as f on t.fileID=f.fileID where [email protected]"); 

так что проблема !?

+0

«Ссылка на объект, не установленная на экземпляр объекта», является исключением, которое вы получаете, когда пытаетесь получить доступ к тем, что еще не было инициализировано. Выясните, какое значение не было инициализировано. Трассировка стека должна указывать, в какой строке кода это происходит. Или вы можете отлаживать и позволять ему ломаться, когда генерируется исключение. Я предполагаю, что это больше связано с жизненным циклом вашего элемента управления и чем-то вроде 'tasksRepeater', равным нулю, чем ваш SQL. – StriplingWarrior

+0

Проблема в sql-заявлении, я уверен. потому что, когда я меняю инструкцию sql на другую, у которой не было «похожее слово», код запускается успешно. –

+0

Основываясь на новой информации, которую вы предоставили, я бы сказал, что вам нужно посмотреть на свой класс «DBAccess» и увидеть какие обстоятельства он вернет значение «null» вместо набора данных. На самом деле, попробуйте выполнить этот метод 'select' с помощью отладчика и посмотреть, что именно происходит. – StriplingWarrior

ответ

0

Ваш запрос не возвращает ни одного ряда, поэтому, когда вы делаете ds.Tables[0], он бросает, потому что ds.Tables пуст.

Я подозреваю, что ваш запрос имеет опечатку, поскольку вы устанавливаете значение параметра @text, но параметр не существует в запросе. Ваш запрос, вероятно, должен заканчиваться:

"...where [email protected] and t.firstName LIKE '%@text%'" 

Это, как говорится, ваш код должен, вероятно, будет иметь дело со случаем, когда запрос не возвращает ни одной строки (вы можете проверить это путем проверки Count собственности на ds.Tables).

+0

Это не так, что 'ds.Tables' пуст, но его метод' DBAccess.select() 'возвращает значение null. – StriplingWarrior

0

Я предполагаю, что ошибка есть в том месте. Попытайтесь использовать этот запрос

"select t.*,u.firstName,u.lastName,u2.firstName as afirstName,u2.lastName as alastName ,i.icon,ii.iconPath as taskIcon, iii.iconPath as seenIcon,f.fileName,f.fileID from tasks as t inner join users as u on u.userID=t.addedBy inner join users as u2 on u2.userID=t.attachTo inner join priorityIcons as i on t.priority=i.priorityID inner join icons as ii on t.status=ii.iconName inner join icons as iii on t.isNew=iii.iconName left join files as f on t.fileID=f.fileID where [email protected] and u.firstName LIKE '%asd%'" 

Поместите u.FirstName вместо t.firstName.

Я думаю, ошибка в псевдониме для t.

попробуйте это.

Смежные вопросы