各位老师,本人初学.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
{
}
你这边定义了 用存储过程作为 命令类型,那么
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 = "存储过程名称";
这行代码去掉也可以 ,默认CommandType是 Text的
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
{
}
你不是定义了用存储过程的?this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;怎么还在代码中用sql语句。
不然把this.oracleComm.CommandType = System.Data.CommandType.StoredProcedure;改为this.oracleComm.CommandType = System.Data.CommandType.Text