当时求解方法如下: 1 .主要是引用没有实例为空所造成的。 应该是那个查询语句 select * from Small_Class where SmallClass_ID = " +SmallClass_ID, " Small_Class " , " DBConnection " 返回一个NULL,使得 DataRow SmallClassName = null了。我把select * from Small_Class where SmallClass_ID = " +SmallClass_ID放入SQL2005中进行测试,但这个 SmallClass_ID是外来的变量,所以我只能这样写了delcare @SmallClass_ID int select * from Small_Class where SmallClass_ID = @SmallClass_ID结果数据正常,为了再具体点我取了个具体的值 select * from Small_Class where SmallClass_ID = 1结果出现一行数据。可以证明我在SQL方面的语句是没有问题的。 2 .SmallClassName可能没有得到值SmallClassName[ " SmallClass_ID " ]就会出错. 断点看SmallClassName是否能得到值.没得到那就是DBOperate.GetDataRow(...)有问题了. SmallClassName = DBOperate.GetDataRow( " select * from Small_Class where SmallClass_ID= " + SmallClass_ID, " Small_Class " , " DBConnection " ); GetSmallClassName( 1 ) 经过测试发现这使程序进入死循环中,问题为空还没有解决。我思维回归到了 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 } 这样子就把return product.Tables[ 0 ].Rows.Count == 0 ? null : product.Tables[ 0 ].Rows改为原来的 return product.table[ 0 ].rows.count or return product.table[ 0 ].rows.count = 0 return product.table[ 0 ].rows[ 0 ][ 0 ] return product.table[ 0 ].rows[ 0 ]这样子都不行的。 3 . int a = return product.table[ 0 ].row.count console.writeline( " s " );但这样子也没有返回值。并那问题依然存在。这种方法也不对。
An unhandled exception of type 'System.StackOverflowException' occurred in App_Code.ovf-vfb-.dll 怎么会出现这超出栈的错误呀 那是死循环的原因。 4 .我的思维再次回到为空的问题上。代码为: 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(); } 既然return SmallClassName[ " SmallClass_ID " ].ToString();为空,那就要判断下SmallClassName是否为空。DataRow smallClass_ID SmallClassName = DBOperate.GetDataRow( " select * from Small_Class where SmallClass_ID= " + SmallClass_ID, " Small_Class " , " DBConnection " ); return SmallClassName[ " SmallClass_ID " ].ToString这个不这是不行,但只有判断下了DataRow smallClass_ID = null ; SmallClassName = DBOperate.GetDataRow( " select * from Small_Class where SmallClass_ID= " + SmallClass_ID, " Small_Class " , " DBConnection " ); if (smallClass_ID == null ) ... { return smallClassName["smallClass_ID"].ToString(); } else ... { return null; } 经测试可能达到解决问题的目的