三层多表查询问题?请高手指教
-
2009年7月3日 8:17
private const string select_fgtext = "select a.FGTEXTNAME,a.FGTEXTNUM,b.FGVALTEXT,a.FGTEXTDATE from fgk.fgtext a,fgk.FGVAL b where a.FGVALID = b.FGVALID and a.FGCLASSDM=:FGCLASSDM ORDER BY a.FGTEXTDATE DESC"; #region 根据法规小类ID查询记录 //根据法规小类ID查询记录 public List<IfgtextInfo> SelectId(string Fgclassdm) { OracleParameter parm = new OracleParameter(":FGCLASSDM", OracleType.Char, 6); parm.Value = Fgclassdm; List<IfgtextInfo> Fgtextdm = new List<IfgtextInfo>(); using (OracleDataReader rdr = OracleHelper.ExecuteReader(OracleHelper.ConnectionStringLocalTransaction, CommandType.Text, select_fgtext, parm)) { while (rdr.Read()) { //IfgtextInfo fgtextcx1 = new IfgtextInfo(rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5), rdr.GetString(6), rdr.GetString(7), rdr.GetString(8), rdr.GetString(9), rdr.GetString(10), rdr.GetString(11), rdr.GetString(12), rdr.GetString(13)); IfgtextInfo fgtextcx = new IfgtextInfo(null, rdr.GetString(0), null, null, null, rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), null, rdr.GetString(4), null, null, null); Fgtextdm.Add(fgtextcx); } return Fgtextdm; } } #endregionSQL语句单位执行能查到数据,可在数据层里就不行了,大家帮我看看,或者提供一个可行的方法,谢谢!!!!- 已移动 Sheng Jiang 蒋晟MVP, Moderator 2009年7月3日 12:58 数据库开发 (发件人:ASP.NET 与 AJAX)
全部回复
-
2009年7月3日 8:36
描述问题不理解
问题重点是什么 -
2009年7月3日 8:52
-
2009年7月3日 9:44版主你好,不行了是什么意思,是读取不到数据还是会报错,请详细描述一下
知识改变命运,奋斗成就人生! -
2009年7月3日 10:27版主检查一下,你的这段代码,IfgtextInfo fgtextcx = new IfgtextInfo(null, rdr.GetString(0), null, null, null, rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), null, rdr.GetString(4), null, null, null);
你在构造函数里使用 类似这样的表达式:rdr.GetString(4), 你要做非空判断,这个如果为null的话,可能导致错误。
还有你最好把错误信息贴出来,大家才能帮你分析~
Frank.Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
老徐的博客:http://frank_xl.cnblogs.com -
2009年7月3日 11:32
谢谢楼上的朋友,我换种方式了,当数据库里的字段值为空时,在查询时会提示"没有数据可用于行或列",怎么解决?
public List<IfgtextInfo> SelectId(string Fgclassdm) { int strn = Convert.ToInt32(Fgclassdm.Length); string select_id = null; OracleParameter parm = new OracleParameter(":FGCLASSDM", OracleType.Char, 9); if (strn == 6) { select_id = select_mid; parm.Value = Fgclassdm; } else { select_id = select_fgtext; parm.Value = Fgclassdm; } //OracleParameter parm = new OracleParameter(":FGCLASSDM", OracleType.Char, 9); //parm.Value = Fgclassdm; List<IfgtextInfo> Fgtextdm = new List<IfgtextInfo>(); using (OracleDataReader rdr = OracleHelper.ExecuteReader(OracleHelper.ConnectionStringLocalTransaction, CommandType.Text, select_id, parm)) { while (rdr.Read()) { IfgtextInfo fgtextcx = new IfgtextInfo( rdr.GetString(0).ToString(), rdr.GetString(1).ToString(), rdr.GetString(2).ToString(), rdr.GetString(3).ToString(), rdr.GetString(4).ToString(), rdr.GetString(5).ToString(), rdr.GetString(6).ToString(), rdr.GetString(7).ToString(), rdr.GetString(8).ToString(), rdr.GetString(9).ToString(), rdr.GetString(10).ToString(), rdr.GetString(11).ToString(), rdr.GetString(12).ToString()); //IfgtextInfo fgtextcx = new IfgtextInfo(null, rdr.GetString(0), null, null, null, rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), null, rdr.GetString(4), null, null, null); Fgtextdm.Add(fgtextcx); } return Fgtextdm; } }当所有字段都有值时不会出错? -
2009年7月3日 11:52
数据库中的此行此列为空。
解决办法
1 判断是否为空,不为空执行。
代码:
string s =dr.IsDBNull(1) == true ? "" : dr.GetString(1);
可简写为
string s =dr.IsDBNull(1) ? "" : dr.GetString(1);
相当于
string s = null;
if(dr.IsDBNull(1) )
{
s="";
}
else
{
s=dr.GetString(1);
}
2使用GetValue
代码
string s = dr.GetValue(1).ToString();- 已建议为答案 肖小勇MVP, Moderator 2009年7月5日 3:01
- 已标记为答案 Allen Chen - MSFTMicrosoft Employee, Moderator 2009年7月10日 2:09
-
2009年7月5日 3:03版主。Net 2.0 提供了 Nullable<T> 很好的解决了这个问题,你可以了解一下
知识改变命运,奋斗成就人生!