0

I have the following method that uses to search for a text in a table

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 t.followingID=@followingID 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();
    }

And the exception Message is "Object reference not set to an instance of an object."

but when i exchange sql statement above with the following one, the code runs successfully

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 t.followingID=@followingID"); 

so what is the problem!?

4

2 回答 2

0

您的查询没有返回任何行,因此当您这样做ds.Tables[0]时会抛出因为ds.Tables为空。

我怀疑您的查询有错字,因为您正在设置@text参数的值,但查询中不存在该参数。您的查询可能需要以以下结尾:

"...where t.followingID=@followingID and t.firstName LIKE '%@text%'"

话虽如此,您的代码应该能够处理查询不返回任何行的情况(您可以通过检查Counton 属性来检查这一点ds.Tables)。

于 2013-10-08T23:49:40.207 回答
0

我猜错误在where子句中。请尝试使用此查询

"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 t.followingID=@followingID and u.firstName LIKE '%asd%'"

放置 u.FirstName 而不是 t.firstName。

我猜错误是 t 的别名。

尝试这个。

于 2013-10-09T11:30:26.207 回答