菜鸟请教,一个关于oracle数据库连接问题。55…………折腾了我一个星期,急死了。

yangkangyangkang 2003-08-20 04:10:10
前几日在ysky上看到了一篇asp.net画柱状图的代码,偶拿下来,果然能用。于是,偶将数据库改成oracle,却总是出错,烦劳各位大侠,帮偶看看代码。
源代码:
using System ;
using System.Collections ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Web ;
using System.Web.SessionState ;
using System.Web.UI ;
using System.Web.UI.WebControls ;
using System.Web.UI.HtmlControls ;
using System.Drawing.Imaging ;
//下面程序中使用的ImageFormat类所在的命名空间
using System.Data.OleDb ;
//下面程序中使用到关于数据库方面的类所在的命名空间
namespace bar
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
string sRouter = "c:\\db.mdb" ;
//获得当前Access数据库在服务器端的绝对路径
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + sRouter ;
//创建一个数据库连接
OleDbConnection myConn = new OleDbConnection (strCon) ;
string strCom = " SELECT YF ,SL FROM Table01 ORDER BY YF" ;
myConn.Open () ;
OleDbCommand myCommand = new OleDbCommand (strCom ,myConn) ;
OleDbDataReader myOleDbDataReader = myCommand.ExecuteReader() ;
//创建OleDbDataReader实例,并以此实例来获取数据库中各条记录数据
int [] iXiaoSH = new int [12] ;
//定义一个数组,用以存放从数据库中读取的销售数据
string [] sMoth = new string [ 12 ] ;
//定义一个数组,用以存放从数据库中读取的销售月份
int iIndex = 0 ;
while ( myOleDbDataReader.Read ( ) )
{
iXiaoSH [iIndex] = myOleDbDataReader.GetInt32(1) ;
sMoth [iIndex] = myOleDbDataReader.GetInt32(0).ToString() + "月" ;
iIndex++ ;
}
//读取Table01数据表中的各条数据,并存放在先前定义的二个数组中
myConn.Close ( ) ;
myOleDbDataReader.Close( ) ;
//关闭各种资源
Bitmap bm = new Bitmap ( 600 , 250 ) ;
//创建一个长度为600,宽带为250的Bitmap实例
Graphics g ;
g = Graphics.FromImage ( bm ) ;
//由此Bitmap实例创建Graphic实例
g.Clear ( Color.Snow ) ;
//用Snow色彩为背景色填充此绘画图面
g.DrawString ( " ××公司××器件2002年度销售情况一览表" , new Font ( "宋体" , 16 ) , Brushes.Black , new Point ( 5 , 5 ) ) ;
//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
//以下代码是是实现图01中的右上部
Point myRec = new Point ( 535 , 30 ) ;
Point myDec = new Point ( 560 , 26 ) ;
//以上是在图01中为下面绘制定位
g.DrawString ( "单位:万套" , new Font ( "宋体" , 9 ) , Brushes.Black , new Point ( 525 , 12 ) ) ;
for ( int i = 0 ; i < sMoth.Length ; i++ )
{
g.DrawRectangle ( Pens.Black , myRec.X , myRec.Y , 20 , 10 ) ;
//绘制小方块
g.FillRectangle ( new SolidBrush ( GetColor ( i ) ) , myRec.X , myRec.Y , 20 , 10 ) ;
//填充小方块
g.DrawString ( sMoth [ i ].ToString ( ) , new Font ( "宋体" , 9 ) , Brushes.Black , myDec ) ;
//绘制小方块右边的文字
myRec.Y += 15 ;
myDec.Y += 15 ;
}
//以下代码是绘制图01中的Bar图,及其销售数量
int iBarWidth = 40 ;
int scale = 10 ;
for ( int i = 0 ; i < iXiaoSH.Length ; i++ )
{
g.DrawRectangle ( Pens.Black , ( i * iBarWidth ) + 15 , 250 - ( iXiaoSH [ i ] * scale ) , 20 , ( iXiaoSH [ i ] * scale ) + 5 ) ;
//绘制Bar图
g.FillRectangle ( new SolidBrush ( GetColor ( i ) ) , ( i * iBarWidth ) + 15 , 250 - ( iXiaoSH [ i ] * scale ) , 20 , ( iXiaoSH [ i ] * scale ) + 5 ) ;
//以指定的色彩填充Bar图
g.DrawString ( iXiaoSH [ i ].ToString ( ) , new Font ( "宋体" , 9 ) , Brushes.Black , ( i * iBarWidth ) + 20 , 235 - ( iXiaoSH [ i ] * scale ) ) ;
//显示Bar图代表的数据
}
//以下代码是绘制图01中的边框,并形成Jpeg文件,供浏览器显示出来
Pen p = new Pen ( Color.Black , 2 ) ;
g.DrawRectangle ( p , 1 , 1 , 598 , 248 ) ;
bm.Save ( Response.OutputStream , ImageFormat.Jpeg ) ;
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
private Color GetColor ( int itemIndex )
{
  Color MyColor ;
  int i = itemIndex ;
  switch (i)
  {
   case 0 :
     MyColor = Color.Cornsilk ;
     return MyColor ;
    case 1 :
      MyColor = Color.Red ;
      return MyColor ;
      case 2 :
      MyColor = Color.Yellow ;
      return MyColor ;
      case 3 :
      MyColor = Color.Peru ;
      return MyColor ;
      case 4 :
      MyColor = Color.Orange ;
      return MyColor ;
      case 5 :
      MyColor = Color.Coral ;
      return MyColor ;
      case 6:
      MyColor = Color.Gray ;
      return MyColor ;
      case 7:
      MyColor = Color.Maroon ;
      return MyColor ;
      case 8:
      MyColor = Color.Azure ;
      return MyColor ;
      case 9:
      MyColor = Color.AliceBlue ;
      return MyColor ;
      case 10:
      MyColor = Color.Bisque ;
      return MyColor ;
      case 11:
      MyColor = Color.BurlyWood ;
      return MyColor ;
      case 12:
      MyColor = Color.Chartreuse ;
      return MyColor ;
      default:
      MyColor = Color.Green ;
      return MyColor ;
    }
}

#endregion
}
}
偶修改了数据库的连接代码:
//string sRouter = "c:\\db.mdb" ;
//获得当前Access数据库在服务器端的绝对路径
string strCon = "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=dbo;Password=dbo;Data Source=sjk";
//创建一个数据库连接
OleDbConnection myConn = new OleDbConnection (strCon) ;
string strCom = "select to_char(rkrq,'mm'),round(sum(sb_zsxx.se)) from sb_zsxx where (ZSXM_DM='01' or zsxm_dm='02') and to_char(rkrq,'yyyy')='2003'group by to_char(rkrq,'mm')" ;
myConn.Open () ;
OleDbCommand myCommand = new OleDbCommand (strCom ,myConn) ;


总是这个位置报错:
iXiaoSH [iIndex] = myOleDbDataReader.GetInt32(1) ;

请各位大侠帮偶看看,偶快被这个东东折磨疯了………………
...全文
25 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaotiebing 2003-09-06
  • 打赏
  • 举报
回复
iXiaoSH [iIndex] = myOleDbDataReader.GetInt32(1)
vb.net 中
iXiaoSH (iIndex) =cint( myOleDbDataReader(1) )
qimini 2003-08-21
  • 打赏
  • 举报
回复
Convert.ToInt32(myOleDbDataReader.GetString(1));
yangkangyangkang 2003-08-21
  • 打赏
  • 举报
回复
郁闷哦……我用trunc()函数,错误提示还是一样的。
行 42: iXiaoSH [iIndex] = myOleDbDataReader.GetInt32(1) ;

难道没有人做成功吗?
qimini 2003-08-20
  • 打赏
  • 举报
回复
Oracle的数字舍入函数是TRUNC,不是Round
A sample:
TRUNC(15.79,1)
yangkangyangkang 2003-08-20
  • 打赏
  • 举报
回复
5555…………这里不能贴图,我把报错信息贴上来。



说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 由于符号不匹配或数据溢出以外的其他原因,未能转换数据值。例如,数据在数据存储区中已损坏,但该行仍可以检索。

源错误:
行 40: while ( myOleDbDataReader.Read ( ) )
行 41: {
行 42: iXiaoSH [iIndex] = myOleDbDataReader.GetInt32(1) ;
行 43: sMoth [iIndex] = myOleDbDataReader.GetInt32(0).ToString() + "月" ;
行 44: iIndex++ ;
源文件: f:\bar\sjt.aspx.cs 行: 42


数据库肯定没有问题,sql语句也没有问题,sqlplus里可以正常检索出数据来。
yangkangyangkang 2003-08-20
  • 打赏
  • 举报
回复
"select to_char(rkrq,'mm'),round(sum(sb_zsxx.se)) from sb_zsxx where (ZSXM_DM='01' or zsxm_dm='02') and to_char(rkrq,'yyyy')='2003'group by to_char(rkrq,'mm')" ;

//
round(sum(sb_zsxx.se)) 这个在oracle里是单精度浮点型,我已经转成了int
int [] iXiaoSH = new int [12] ; 这个数组定义的是int,数据类型应该没有问题啊。
不知道什么原因,郁闷……………………
panyee 2003-08-20
  • 打赏
  • 举报
回复
调试一下, 看你已经执行了 ExecuteReader(), 数据库应该是连上了

取数据出的错, 那要看数据类型是否一致


你可以读成string类型, 再转化
qimini 2003-08-20
  • 打赏
  • 举报
回复
怀疑是数据库字段类型不匹配
qimini 2003-08-20
  • 打赏
  • 举报
回复
Mark
DoHope 2003-08-20
  • 打赏
  • 举报
回复
学习。
lbx1979 2003-08-20
  • 打赏
  • 举报
回复
报什么错啊,抓出来看看,可能就是没连接上oracle
在vs.net里试试能不能连上oracle啊
acewang 2003-08-20
  • 打赏
  • 举报
回复
首先能连上oracle吗?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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