【发布时间】:2013-10-08 23:09:33
【问题描述】:
我有以下用于在表格中搜索文本的方法
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();
}
异常消息是“对象引用未设置为对象的实例。”
但是当我将上面的sql语句与下面的交换时,代码运行成功
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");
那么问题出在哪里!?
【问题讨论】:
-
“对象引用未设置为对象的实例”是您尝试访问尚未初始化的内容时遇到的异常。找出尚未初始化的值。堆栈跟踪应指示这发生在哪一行代码上。或者您可以调试并在抛出异常时让它中断。我猜这与您的控件的生命周期有关,例如
tasksRepeater为空而不是您的 SQL。 -
问题出在sql语句中,我敢肯定。因为当我用另一个没有“like word”的sql语句更改时,代码运行成功..
-
根据您提供的新信息,我想说您需要查看您的
DBAccess类,看看在什么情况下它将返回null值而不是数据集。事实上,尝试使用调试器单步执行select方法,看看到底发生了什么。
标签: asp.net sql-server c#-4.0 sql