读取ACCESS数据库问题!!!急!!!

laixiang 2003-06-29 01:20:04
在做一个工资管理系统过程中,,调试过程中没有什么问题,但在部分机上运行时,在读取ACCESS数据库中的几个表进行比较同运算时,却出现了“索引和长度只能读取数组内,参数是:length“,,,分析了源程序,发现不了什么问题,请高手帮帮忙1111
...全文
45 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightheroes 2003-07-04
  • 打赏
  • 举报
回复
恭喜
laixiang 2003-07-04
  • 打赏
  • 举报
回复
问题解决了:原因是在这里,读取ACCESS97的数据库,字段为:日期时间类型,值为:8:25:00

而读出来的是:1889-12-30 8:25:00
而在使用Substring()时,出现了错误。
laixiang 2003-07-01
  • 打赏
  • 举报
回复
public static bool gykq(string kh,string da)
{
bool f=false;
//int i=0;
int j=0;
int[] myint=new int[10];
string[] zj=new string[4];
string aa=da.Trim()+"-01";
string bb=da.Trim()+"-"+ins.reday(da).Trim();
//DateTime td=Convert.ToDateTime(da);
float jb,zgs,jt;
try
{
OleDbConnection conn = db.gconn(); //gconn():得到连接对象
conn.Open();
string strCom ="select * from 考勤分析表 where 日期 between #"+aa+"# and #"+bb+"# and 卡号='"+kh.Trim()+"'";
OleDbCommand myCommand =new OleDbCommand(strCom,conn);
OleDbDataReader reader;
reader =myCommand.ExecuteReader() ;


if(reader.Read())
{



for(j=0;j<=9;j++)
{
myint[j]=0;
}

for(int e=0;e<=3;e++)
{
zj[e]="";
}
jb=0;
zgs=0;
jt=0;

do
{

zj[0]=reader["卡号"].ToString();
zj[1]=da.ToString();
zj[2]=reader["部门"].ToString();
zj[3]=reader["姓名"].ToString();



//迟到总数
myint[0]+=Convert.ToInt32(reader["迟到"].ToString());
myint[0]+=Convert.ToInt32(reader["早退"].ToString());

//十至二五,小三十,大于三十
if((Convert.ToInt32(reader["严重迟到"].ToString())>10) & (Convert.ToUInt16(reader["严重迟到"].ToString())<=15))
{
myint[1]++;
}
if((Convert.ToInt32(reader["严重迟到"].ToString())>15) & (Convert.ToUInt16(reader["严重迟到"].ToString())<=30))
{
myint[2]++;
}
if(Convert.ToInt32(reader["严重迟到"].ToString())>30)
{
myint[3]++;
}

if((Convert.ToInt32(reader["严重早退"].ToString())>10) & (Convert.ToUInt16(reader["严重早退"].ToString())<=15))
{
myint[1]++;
}
if((Convert.ToInt32(reader["严重早退"].ToString())>15) & (Convert.ToUInt16(reader["严重早退"].ToString())<=30))
{
myint[2]++;
}
if(Convert.ToInt32(reader["严重早退"].ToString())>30)
{
myint[3]++;
}


//请假时间
myint[4]+=Convert.ToInt32(reader["请假时间"].ToString());

//旷工日数
myint[5]+=(int)Convert.ToSingle(reader["旷工"].ToString());

//加班1
jb+=Convert.ToSingle(reader["加班时间"].ToString());
//加班2


//加班3
if(db.checkjq(reader["日期"].ToString()))
{
zgs+=Convert.ToSingle(reader["总工时"].ToString());
}
//夜间津贴
jt+=db.jishuan(reader["卡号"].ToString(),reader["日期"].ToString());
}while(reader.Read());



if(ins.check(zj[0],zj[1]))
{
bool u=ins.updatekq(zj[0],zj[1],zj[2],zj[3],myint[0],myint[1],myint[2],myint[3],myint[4],myint[5],jb,myint[7],zgs,jt);
}
else
{
bool t=ins.addkq(zj[0],zj[1],zj[2],zj[3],myint[0],myint[1],myint[2],myint[3],myint[4],myint[5],jb,myint[7],zgs,jt);
}


f=true;
}
else
{
MessageBox.Show("这个卡号没有考勤记录");
}
reader.Close();
conn.Close();

}
catch (Exception e1)
{
MessageBox.Show("数据库出错gykq:"+e1.Message);
}

return f;
}



以上是单个记录的,数据库是ACCESS97来的,明明有记录,但查找结果就没有,在win2000下;


public static bool fuck(string da)
{
string[] kh=db.readkh();
for(int i=0;i<kh.Length;i++)
{
gykq(kh[i],da.Trim());
}
return true;
}

这个是调用上面的,也是在win2000下才会出现上面说的问题????
3no 2003-06-30
  • 打赏
  • 举报
回复
是不是说数组溢出了?你看看有这方面的可能么?
TheAres 2003-06-29
  • 打赏
  • 举报
回复
可能就太多了,我想不到那么全。

这个比较明显。
int[] intArr = {1,2,3};
int a = intArr[intArr.Length];
laixiang 2003-06-29
  • 打赏
  • 举报
回复
说说可能的情况吧,,我的办公室网络有问题,不能上网。、现在不能贴出代码。
TheAres 2003-06-29
  • 打赏
  • 举报
回复
找出出错的代码来看看?

110,557

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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