DataSet 数据库Access

qinhuaiuser 2009-07-16 06:12:47
程序的基本功能是要把一个文件里的内容读到数据库中,这个文件的内容的主要是:人名,本人年龄,本人体重

下面的这几行代码是建立一个文件的流,这个文件里涉及很多人,其中numberPersonnames代表文件里的人数
BufferedStream dataFileStream = new BufferedStream(File.Open( strSelectFile, FileMode.Open, FileAccess.Read, FileShare.Read));
BinaryReader dataFileReader = new BinaryReader(dataFileStream, System.Text.Encoding.Default);
int numberPersonnames = dataFileReader.ReadInt32();


下面这几行代码是建立数据库连接
OleDbConnection thisCon = new OleDbConnection
(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\mytest\ProfessionalMenus\Sta.mdb");

thisCon.Open();
OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT * FROM person", thisCon);
OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
这里用了DataSet
DataSet thisSet = new DataSet();
thisAdapter.Fill(thisSet, "person");

for (int i = 0; i < numberPersonnames; i++)
{
DataRow thisRow = thisSet.Tables["person"].NewRow();

thisRow.BeginEdit();
thisRow["Name"] = dataFileReader.ReadString().ToString();
thisRow["Age"] = dataFileReader.ReadSingle();
thisRow["Ton"] = dataFileReader.ReadSingle();
thisRow.EndEdit();
插入新的一行
thisSet.Tables["person"].Rows.Add(thisRow);
}

thisAdapter.Update(thisSet, "person");
thisCon.Close();



出现的问题是:当文件很小是,里面的人数在5000左右时,数据库的内容是正确的。但是当文件很大时,比如里面有两万个人数时,数据库中的数据就有点小错误,原文件中的人名在数据库中都有,而且信息都是正确的,但是数据库里有一些多余的行,这些行中没有人名,但是有年龄和体重信息,这些信息好像也不知道是从哪里来的。请问这是什么原因???

















...全文
105 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc1_2_3 2009-07-17
  • 打赏
  • 举报
回复
找到错误记录的ID,在程序里设个断点调试一下
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 abc1_2_3 的回复:]
可以让程序自增ID,舍弃Access的自增编号,Access数据量大了会有很多问题
[/Quote]

刚才使程序自增ID,还是一样的结果
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 abc1_2_3 的回复:]
可以让程序自增ID,舍弃Access的自增编号,Access数据量大了会有很多问题
[/Quote]

好的,我试试
abc1_2_3 2009-07-17
  • 打赏
  • 举报
回复
可以让程序自增ID,舍弃Access的自增编号,Access数据量大了会有很多问题
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
这里与主键有关系么?自动编号不会出现主键冲突的,如果换个主键有时候会有数据冲突
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
文件里的数据长度不对应???但是当数据量不大时,比如5000行左右时,结果是正确的。只是当数据量大时,比如16000行时,就有那个错误
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
具体的错误我可以举个例子:比如我的文件里的内容是
A,18,58.35
B,58,67.25
C,62,56.36
D,45,46.58
。。。。。。。
。。。。。。。
。。。。。。。
X,XX,XX.XX
。。。。。。。
这里是数据量很大的情况

数据库里的情况是这样的:
Id Name Age Ton
1 A 18 58.35
2 B 58 67.25
3 C 62 56.36
4 56 65.35
5 87 53.48
6 D 45 46.58
。。。。。。。
。。。。。。。
。。。。。。。
大体的情况就是这样的,这里的Id号是4和5的两行在原文件中都没有,但是在数据库中却出现了,原文件中有的数据在数据库中都有,而且都是正确的!
还有,就是当数据量不大时,数据库中的内容是正确的。。。请大家帮忙看一下!
abc1_2_3 2009-07-17
  • 打赏
  • 举报
回复
换个主键试试,不用自动编号
燃烧的荷尔蒙 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 songbb123 的回复:]
估计是文件里的数据长度不对应,顺序也有可能会乱掉的。
[/Quote]
有这种可能
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
数据库里的字段有四个,其中一个是Id,这个是自动编号的,设置的主键就是这个Id
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
很抱歉,昨天有点事,没来得及回复大家。。。
qinhuaiuser 2009-07-17
  • 打赏
  • 举报
回复
找到问题的原因了,是我的那个数据有问题,我有换了一个文件,结果是正确的,这样的话,我就应该在程序中添加一段判断的代码,对不符合要求的行不进行插入操作!!!谢谢大家啊!!!
fanlose2 2009-07-16
  • 打赏
  • 举报
回复
代码貌似没有问题,建议换一种添加方法 试试!
lsj_zrp 2009-07-16
  • 打赏
  • 举报
回复
应该是你文件里面的数据问题,设置断点看看你读取文件
天府荣城 2009-07-16
  • 打赏
  • 举报
回复
估计是文件里的数据长度不对应,顺序也有可能会乱掉的。
andy0618 2009-07-16
  • 打赏
  • 举报
回复
人名对应的字段是必填的吗?
可以加判断,不符合的数据不要往数据库里写
jasondct 2009-07-16
  • 打赏
  • 举报
回复
神奇啊 会莫名其妙多一些东西。
十八道胡同 2009-07-16
  • 打赏
  • 举报
回复
数据库里的数据比文件中的了一些不正常的行?

110,534

社区成员

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

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

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