各位老师,本人初学.NET。在编写程序过程中遇到了一个难题,无法从数据库在取数,不知道如何解决。代码如下:
结构:Oracle 10 G +C#//以下是数据源// oracleConn
// 
this.oracleConn.ConnectionString = "user id=sqlcx;data source=bygserp;password=sqlcx";
//                                
// oracleComm
// 
this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;
this.oracleComm.Connection = this.oracleConn;try
{
string strsql;
strsql = "select F_shdw,sum(F_ZJ - F_KJ) - SUM((F_ZJ - F_KJ)*F_KZBL)  from jl.Z_IRON  where (f_shsj >=to_date('"+_riqi3+"','yyyy-mm-dd hh24:mi:ss')) and f_shsj < to_date('"+_riqi2+"','yyyy-mm-dd hh24:mi:ss')  and f_shdw is not null group by F_shdw";
oracleComm.CommandText = strsql;

oracleConn.Open();//问题好象是数据库打不开
                
//Label3.Text="yangjilei";
d1[0]="0";
d1[1]="0";
d1[2]="0";
d1[3]="0";
OracleDataReader myreader = oracleComm.ExecuteReader();             
int b = 0;

try
{
while(myreader.Read ())
{  
if (myreader.IsDBNull(0) )
{}
 
else {

                    d2[b]=myreader.GetValue(0).ToString();
d1[b]=myreader.GetValue(0).ToString();
}

b++;

}
                       
myreader.Close(); }
catch


}       
oracleConn.Close();                    

for(int d=0;d<=b;d++)
{
try
{
switch(d2[d].ToString())
{ //5031 炼钢一区铁水虚拟库 1001V91000000001FBAH
//5032 炼钢二区铁水虚拟库 1001V91000000001FBAI
//5029 铸管铁水虚拟库 1007V910000000000KJ6
//8020 生铁库 1002V910000000001BKI
case "1001V91000000001FBAH":sjrc2[47]= Convert.ToDecimal(d1[d]).ToString("f2");break;
case "1001V91000000001FBAI":sjrc2[48]= Convert.ToDecimal(d1[d]).ToString("f2");break;
case "1007V910000000000KJ6":sjrc2[49]= Convert.ToDecimal(d1[d]).ToString("f2");break;
default :sjrc2[50]=Convert.ToDecimal(d1[d]).ToString("f2");break;



}

}
catch
{}


}




}
catch
{


}

解决方案 »

  1.   

    打开了,在.NET主介面进行设计时使用测试均通过.
      

  2.   

    this.oracleConn.ConnectionString = "user id=sqlcx;data source=bygserp;password=sqlcx";这样的连接字符串可以用吗?
      

  3.   

    this.oracleConn.ConnectionString = "user id=sqlcx;data source=bygserp;password=sqlcx"在主件在定义时测试通过!
      

  4.   

    this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;
    你这边定义了 用存储过程作为 命令类型,那么
    strsql = "select F_shdw,sum(F_ZJ - F_KJ) - SUM((F_ZJ - F_KJ)*F_KZBL) from jl.Z_IRON where (f_shsj >=to_date('"+_riqi3+"','yyyy-mm-dd hh24:mi:ss')) and f_shsj < to_date('"+_riqi2+"','yyyy-mm-dd hh24:mi:ss') and f_shdw is not null group by F_shdw";
    //你这里怎么还用 sql语句? 应该写 存储过程的名称
    oracleComm.CommandText = strsql; 应该改为: oracleComm.CommandText = "存储过程名称";
      

  5.   

    或者 你把this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;
    这行代码去掉也可以 ,默认CommandType是 Text的
      

  6.   

    这样还是读不出来
    string strsql;
    strsql = "select F_shdw,sum(F_ZJ - F_KJ) - SUM((F_ZJ - F_KJ)*F_KZBL)  from Z_IRON  where (f_shsj >=to_date('"+_riqi3+"','yyyy-mm-dd hh24:mi:ss')) and f_shsj < to_date('"+_riqi2+"','yyyy-mm-dd hh24:mi:ss')  and f_shdw is not null group by F_shdw";
    oracleComm.CommandText = strsql;
    oracleConn.Open();                
                  d1[0]="0";
    d1[1]="0";
    d1[2]="0";
    d1[3]="0";
    OracleDataReader myreader = oracleComm.ExecuteReader();             
    int b = 0;

    try
    {
    while(myreader.Read ())
    {  
    if (myreader.IsDBNull(0) )
    {}
     
    else {

                              d2[b]=myreader.GetValue(0).ToString();
    d1[b]=myreader.GetValue(0).ToString();
    }

    b++;

    }
                     
           myreader.Close(); }
    catch


    }       
    oracleConn.Close();              

    for(int d=0;d<=b;d++)
    {
    try
    {
    switch(d2[d].ToString())
    { //5031 炼钢一区铁水虚拟库 1001V91000000001FBAH
    //5032 炼钢二区铁水虚拟库 1001V91000000001FBAI
    //5029 铸管铁水虚拟库 1007V910000000000KJ6
    //8020 生铁库 1002V910000000001BKI
    case "1001V91000000001FBAH":sjrc2[47]= Convert.ToDecimal(d1[d]).ToString("f2");break;
    case "1001V91000000001FBAI":sjrc2[48]= Convert.ToDecimal(d1[d]).ToString("f2");break;
    case "1007V910000000000KJ6":sjrc2[49]= Convert.ToDecimal(d1[d]).ToString("f2");break;
    default :sjrc2[50]=Convert.ToDecimal(d1[d]).ToString("f2");break;



    }

    }
    catch
    {}


    }




    }
    catch
    {


    }
      

  7.   


    你不是定义了用存储过程的?this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;怎么还在代码中用sql语句。
    不然把this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;改为this.oracleComm.CommandType = System.Data.CommandType.Text
      

  8.   

    就是不用上述代码功能也是用不了。从资料得知,.NET中的oracleConnection不支持ORACLE10i