SQL Server 和 SQL Server Compact 之间的数据传输
本文关键字:SQL Server 数据传输 Compact 之间 | 更新日期: 2023-09-27 18:36:53
我正在使用VS 2008和SQL Server 2005和SQL Server Compact Framework 3.5
- 我有移动设备(他们有 Window Ce 6.0 操作系统)。
- 我把我的程序安装到视窗 ce 设备
-
我在设备中使用.sdf数据库。
-
.SDF
和.MDF
数据库架构相同
工作人员在公司外使用此设备并保存数据。
当他们到达公司时,我必须将他们.sdf
文件中的数据保存到SQL Server实例中。
我是这样做的:
public void TransferData()
{
SqlCeCommand tempcecommand=new SqlCeCommand("select * from Customer",SDFConnection);
SqlCeDataReader tempcereader=tempcecommand.ExecuteReader();
SqlCommand tempmscommad=new SqlCommand("",MDFConnection);
while(tempcereader.Read())
{
tempcommandtext = String.Format("insert into Customer (Column1,Column2) values ('{0}','{1}')",tempcereader["Column1"],tempcereader["Column2"] ;
tempmscommand.CommandText = tempmscommand;
tempmscommand.ExecuteNonQuery();
}
}
是否有更简单的方法将数据从.sdf
文件传输到 SQL Server 实例?
第一种方法可能是
string cmdText = "INSERT INTO CUSTOMER (Column1, Column2) VALUES (@col1, @col2)"
SqlCommand tempmscommad=new SqlCommand(cmdText,MDFConnection);
tempmscommad.Parameters.AddWithValue("@col1", "");
tempmscommad.Parameters.AddWithValue("@col1", "");
while(tempcereader.Read())
{
tempmscommad.Parameters["col1"].Value = tempcereader["Column1"].ToString();
tempmscommad.Parameters["col2"].Value = tempcereader["Column2"].ToString();
tempmscommand.ExecuteNonQuery();
}
这仍将循环访问 CE 数据,但删除循环内的字符串格式并使用更安全的参数化查询。但是,这将需要为要插入的每条记录执行命令。
如果您绝对确定您的值在导入时不会被用户篡改,则可以利用 Sql Insert 的多重插入功能
注意 - 实际上不建议使用这种方式,因为它使用字符串连接,这在处理数据库命令时是一种非常危险的做法。
您需要确定您的输入值经过山宁泰处理
StringBuilder cmdText = new StringBuilder("INSERT INTO CUSTOMER (Column1, Column2) VALUES ");
while(tempcereader.Read())
{
cmdText.AppendFormat("('{0}', '{1}'),",
tempcereader["Column1"].ToString(),
tempcereader["Column2"].ToString())
}
// remove the last comma
cmdText.Length -= 1;
// Just execute one single command
SqlCommand tempmscommad=new SqlCommand(cmdText.ToString(),MDFConnection);
tempmscommad.ExecuteNonQuery();
最后, THE BEST OPTION
应该是使用类 SqlBulkCopy。我没有办法测试它,因为我没有可用的 SqlCE 数据,但是,考虑到 WriteToServer 方法接受 IDataReader 实例的事实,我想它也应该与 SqlCeDataReader 一起使用
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(MDFConnection))
{
bulkCopy.DestinationTableName = "CUSTOMER";
bulkCopy.WriteToServer(tempcereader);
}
请测试一下....