异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。???????

feifeiyaqi3 2007-09-29 02:17:55
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 27: {
行 28: DataRow SmallClassName =DBOperate.GetDataRow("select * from Small_Class where SmallClass_ID="+SmallClass_ID,"Small_Class","DBConnection");
行 29: return SmallClassName["SmallClass_ID"].ToString();
行 30: }
行 31: }


源文件: c:\Inetpub\wwwroot\TragramMini\WebTragMini\App_Code\Navigation.cs 行: 29

堆栈跟踪:


[NullReferenceException: 未将对象引用设置到对象的实例。]
TangramMiniWeb.Navigation.GetSmallClassName(Int32 SmallClass_ID) in c:\Inetpub\wwwroot\TragramMini\WebTragMini\App_Code\Navigation.cs:29
TangramMiniWeb.pith.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\TragramMini\WebTragMini\tan\pith.aspx.cs:132
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061


它的源码:


public static string GetBigClassName(int BigClass_ID)
{
DataRow BigClassName =DBOperate.GetDataRow("select * from Big_Class where BigClass_ID="+BigClass_ID,"Big_Class","DBConnection");
return BigClassName["BigClass_ID"].ToString();


}

public static string GetSmallClassName(int SmallClass_ID)
{
DataRow SmallClassName =DBOperate.GetDataRow("select * from Small_Class where SmallClass_ID="+SmallClass_ID,"Small_Class","DBConnection");
return SmallClassName["SmallClass_ID"].ToString();-------此句有问题,就是它测试不过去的?????????
}


用到的数据库的表为:
CREATE TABLE [dbo].[Small_Class](
[SmallClass_Id] [int] IDENTITY(1,1) NOT NULL,
[BigClass_Id] [int] NULL,
[SmallClass_Name] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
[Enable] [int] NULL,
[Memo] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL
primary key ([SmallClass_Id])
)

public static DataRow GetDataRow(string sql, string TableName, string dbname)
{

SqlConnection sqlConnection = new SqlConnection(strCon);
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter(sql, sqlConnection);
DataSet product = new DataSet();
sqlAdapter1.Fill(product, TableName);
return product.Tables[0].Rows.Count == 0 ? null : product.Tables[0].Rows[0];
}






...全文
1008 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nemolor 2007-09-29
  • 打赏
  • 举报
回复
应该是return product.Tables[0].Rows[0] == 0; 吧
feifeiyaqi3 2007-09-29
  • 打赏
  • 举报
回复
如果我改成:
return product.Tables[0].Rows[0] = 0;
它也会发生错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误信息: CS0200: 无法对属性或索引器“System.Data.DataRowCollection.this[int]”赋值 -- 它是只读的

源错误:



行 75: //return null;
行 76: //return product.Tables[0].Rows[0];
行 77: return product.Tables[0].Rows[0] = 0;
行 78:
行 79: }


源文件: c:\Inetpub\wwwroot\TragramMini\WebTragMini\App_Code\DBOperate.cs 行: 77
feifeiyaqi3 2007-09-29
  • 打赏
  • 举报
回复
SqlConnection sqlConnection = new SqlConnection(strCon);
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter(sql, sqlConnection);
DataSet product = new DataSet();
sqlAdapter1.Fill(product, TableName);
return product.Tables[0].Rows.Count = 1;
经过我的测试发现,会发生错误
编译器错误信息: CS0200: 无法对属性或索引器“System.Data.InternalDataCollectionBase.Count”赋值 -- 它是只读的

源错误:



行 75: //return null;
行 76: //return product.Tables[0].Rows[0];
行 77: return product.Tables[0].Rows.Count = 1;
行 78:
行 79: }


源文件: c:\Inetpub\wwwroot\TragramMini\WebTragMini\App_Code\DBOperate.cs 行: 77



真相重于对错 2007-09-29
  • 打赏
  • 举报
回复
调试看看具体
product.Tables[0].Rows.Count

等于几????
可以用监视,局部变量
ps:
vs.net 提供那么强大的调试功能,你干吗不用???

feifeiyaqi3 2007-09-29
  • 打赏
  • 举报
回复
不是数据库的问题
DataRow SmallClassName =DBOperate.GetDataRow("select * from Small_Class where SmallClass_ID= '" + SmallClass_ID +" '","Small_Class","DBConnection");
我就用这个测试的select * from Small_Class where SmallClass_ID=1结果还是
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
这进一步缩小了范围。
问题就在:return SmallClassName["SmallClass_ID"].ToString();
还可能是 public static DataRow GetDataRow(string sql, string TableName, string dbname)
{

SqlConnection sqlConnection = new SqlConnection(strCon);
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter(sql, sqlConnection);
DataSet product = new DataSet();
sqlAdapter1.Fill(product, TableName);
return product.Tables[0].Rows.Count == 0 ? null : product.Tables[0].Rows[0]; ?????????????????????????????有问题
真相重于对错 2007-09-29
  • 打赏
  • 举报
回复
DataRow SmallClassName = new DataRow();
DataRow 的构造函数为protected 不能直接new
需要
DataTable.NewRow
真相重于对错 2007-09-29
  • 打赏
  • 举报
回复
return product.Tables[0].Rows.Count == 0 ? null : product.Tables[0].Rows[0];

有可能
product.Tables[0].Rows.Count == 0
所以出错
feifeiyaqi3 2007-09-29
  • 打赏
  • 举报
回复
public static string GetSmallClassName(int SmallClassID)
{
DataRow SmallClassName = new DataRow();
SmallClassName=DBOperate.GetDataRow("select * from Small_Class where SmallClass_ID=" + SmallClassID, "Small_Class", "DBConnection");

return Convert.ToString(SmallClassName["SmallClass_Name"]);
}

Error 1 “System.Data.DataRow.DataRow(System.Data.DataRowBuilder)”不可访问,因为它受保护级别限制 c:\inetpub\wwwroot\TragramMini\WebTragMini\App_Code\Navigation.cs 17 38 http://localhost/TragramMini/WebTragMini/

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧