复制数据表问题

麦田追风 2008-11-23 11:05:35
小弟学PDA开发,现在要复制数据表,我的数据表中有50多万调记录,要将以数据库表中间符合某条件的提取出来放到另一数据库的表中。我写了段代码,这代码要等半天才复制完。
请问高人怎么样可以让数据处理快一点啊~~~~?
下面是我写的代码:

public static void CopyTable(SqlCeConnection srcConnection,SqlCeConnection destConnection,
string queryString,string destTableName)
{
SqlCeCommand srcCommand = srcConnection.CreateCommand();
srcCommand.CommandText = queryString;//这参数是查询语句(select * from 数据源表名 where 条件)

SqlCeCommand destCommand = destConnection.CreateCommand();
destCommand.CommandText = @"Delete from " + destTableName;
destCommand.ExecuteNonQuery();

destCommand.CommandType = CommandType.TableDirect; //基于表的访问,性能更好
destCommand.CommandText = destTableName;//这是目的数据库表名
try
{
SqlCeDataReader srcReader = srcCommand.ExecuteReader();

SqlCeResultSet resultSet = destCommand.ExecuteResultSet(
ResultSetOptions.Sensitive | //检测对数据源所做的更改
ResultSetOptions.Scrollable | //可以向前或向后滚动
ResultSetOptions.Updatable); //允许更新数据

object[] values;
SqlCeUpdatableRecord record;
while (srcReader.Read())
{
// 从源数据库表读取记录
values = new object[srcReader.FieldCount];
srcReader.GetValues(values);

// 把记录写入到目标数据库表
record = resultSet.CreateRecord();
record.SetValues(values);
resultSet.Insert(record);
}

srcReader.Close();
resultSet.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
...全文
159 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦田追风 2008-11-23
  • 打赏
  • 举报
回复
是从数据源到目的数据库,两数据库名称和表名都相同
只是一个有数据一个是空的
insert和put都不好用

insert into 目的数据库路径+"\\"+ 数据库名称.destTableName
select * from 数据源表名 where 条件
这样的语句在Access里可以
可现在用的是SQL Server,inser或put语句是不是不同啊
duping9626 2008-11-23
  • 打赏
  • 举报
回复
游标性能差,想法与楼上一致

insert into destTableName
select * from 数据源表名 where 条件
gomoku 2008-11-23
  • 打赏
  • 举报
回复
没有看到你用SQL CE:)

很遗憾目前SQLce不支持存储过程。你试试看能不能用sql插入语句


insert into destTableName
select * from 数据源表名 where 条件
tang_fu 2008-11-23
  • 打赏
  • 举报
回复
在数据库端做一个存储过程
麦田追风 2008-11-23
  • 打赏
  • 举报
回复
我PDA没有数据库服务器,我是用连数据库文件来连接这数据库的
private static SqlCeConnection conn;
private static string SqlConnectString = "Data Source=\\SD Card\\Contract.sdf";
conn = new SqlCeConnection(SqlConnectString);
if (conn.State == ConnectionState.Closed)
conn.Open();

您说的那个存储过程(stored procedure)不明白怎么做
您能说详细点吗~?
slimfeng 2008-11-23
  • 打赏
  • 举报
回复
没有做过PDA,是不是跟PDA的处理器有关,就是用PC做这个操作完成也不会很快的。
gomoku 2008-11-23
  • 打赏
  • 举报
回复
数据库端做一个存储过程(stored procedure),这样可以节省你一条一条加记录的来回开销。

110,539

社区成员

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

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

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