请问:有什么好的办法用编程方式,写入大批数据到Access库呢

kyle2cj 2008-03-21 02:09:48
Insert into 能写多条记录吗?
...全文
85 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyle2cj 2008-03-22
  • 打赏
  • 举报
回复
谢谢各位的建议,我最后采取的方法是,根据目标表结构,建立一个临时表(只有结构,是空表)

再Select临时表到dataset,通过循环插入新行,直到完成,update到临时表
(好处是在内存操作,而且可以用Commandbuild,很方便)

最后一步,insert 临时表 到 目标表...还是很快的(只有一次操作,效率高)
周公 2008-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 moocow_wong 的回复:]
可以使用循环语句将反复的Insert Into语句放到一个String里,每句SQL语句用分号隔开,最后一步执行,就可以完成的。
[/Quote]
这种办法如果遇到的数据太多,表很复杂,内存耗尽了也未必能整个SQL语句写完。
周公 2008-03-22
  • 打赏
  • 举报
回复

public void InsertUsers(int count)
{
connection.Open();

SqlCommand command = new SqlCommand(sql, connection);
string password = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
string remark = password;
string mail = "abcdssdddd@163.com";
int departId;
int power;
int firstNameLength = firstName.Length;
int lastNameLength = lastName.Length;
string name;
for (int i = 0; i < count; i++)
{
name = firstName[random.Next(DateTime.Now.Millisecond) % firstNameLength].ToString() + lastName[random.Next(DateTime.Now.Millisecond) % lastNameLength].ToString();
departId = random.Next(int.MaxValue);
power = random.Next(int.MaxValue);
command.Parameters.Clear();
command.Parameters.Add("@UserName", SqlDbType.NVarChar, 60).Value =name;
command.Parameters.Add("@Password", SqlDbType.NVarChar, 60).Value = password;
command.Parameters.Add("@Remark", SqlDbType.NVarChar, 60).Value = remark;
command.Parameters.Add("@Mail", SqlDbType.NVarChar, 60).Value = mail;
command.Parameters.Add("@LoginIP", SqlDbType.NVarChar, 50).Value = "127.0.0.1";
command.Parameters.Add("@DepartId", SqlDbType.Int, 4).Value = departId;
command.Parameters.Add("@Power", SqlDbType.Int, 4).Value = power;
command.ExecuteNonQuery();
}
connection.Close();
command.Dispose();
}

不过是SQL Server,要想在Access中用这样的办法,请参考:http://blog.csdn.net/zhoufoxcn/archive/2008/03/19/2195618.aspx
周公 2008-03-22
  • 打赏
  • 举报
回复
在写第一条记录之前打开数据库连接,之后利用循环写入到数据库,当最后一条记录的时候关闭数据库,这样就不必每次添加一条记录打开一下数据库,添加完了之后再关闭数据库,费时费力了。
我昨天尝试了一下,写入300W条记录,用15分钟,我的本本CPU1.39G,内存640M。
ncqingchuan1976 2008-03-22
  • 打赏
  • 举报
回复
建议使用参数进行插入,在穿参数的时候请选择数DATATABLE
m_DataAdpter.InsertCommand.Parameters.Add(New OleDbParameter("@gonghao", OleDbType.VarChar, 0, Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "工号", DataRowVersion.Original, Nothing))
这样的话参数值实际就是你添加到DATATABLE中的新行,这样你就不用自己写循环了。
a854468521 2008-03-21
  • 打赏
  • 举报
回复
如果是数据库转移建议使用数据导入、导出功能。
佐胁良之 2008-03-21
  • 打赏
  • 举报
回复
可以使用循环语句将反复的Insert Into语句放到一个String里,每句SQL语句用分号隔开,最后一步执行,就可以完成的。
kyle2cj 2008-03-21
  • 打赏
  • 举报
回复
因为源数据库里很大,不能Select到dataset,然后修改dataset,再update回去。。。
kyle2cj 2008-03-21
  • 打赏
  • 举报
回复
Insert into Tablename values(*,*,*) 成功了

但不知道怎么可以写多行数据。。。。只能用循环吗?

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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