C# SQL Server和SQL Server Compact之间的数据传输

C# SQL Server和SQL Server Compact之间的数据传输,c#,sql-server,sql-server-ce,C#,Sql Server,Sql Server Ce,我将VS2008与SQLServer2005和SQLServerCompactFramework 3.5一起使用 我有移动设备(他们有WindowsCE6.0操作系统) 我已将程序安装到windows ce设备 我正在设备中使用.sdf数据库 .SDF和.MDF数据库架构是相同的 员工在公司外使用此设备并保存数据 当他们到达公司时,我必须将他们的.sdf文件中的数据保存到SQL Server实例中 我是这样做的: public void TransferData() { SqlCeCo

我将VS2008与SQLServer2005和SQLServerCompactFramework 3.5一起使用

  • 我有移动设备(他们有WindowsCE6.0操作系统)
  • 我已将程序安装到windows 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的多插入功能

请注意-不建议使用这种方法,因为它使用字符串连接,这是处理数据库命令时非常危险的做法。
你需要确定你的

最后,
最好的选择应该是使用该类。我没有办法测试它,因为我没有可用的SqlCE数据,但是,鉴于该方法接受IDataReader实例,我认为它也应该与SqlCeDataReader一起工作

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(MDFConnection))
{
    bulkCopy.DestinationTableName = "CUSTOMER";
    bulkCopy.WriteToServer(tempcereader);
}
请测试一下

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(MDFConnection))
{
    bulkCopy.DestinationTableName = "CUSTOMER";
    bulkCopy.WriteToServer(tempcereader);
}