1) SQL Server 数据库连接不能使用 IntegratedSecurity=True,要使用 User Id 和 Password。Data Source 要设置成 SQL Server 服务器的 IP 地址或者计算机名称。设置成 IP 地址还是计算机名称是有区别的。如果你的 Windows Mobile 设备或仿真器是通过 ActiveSync 连接到 PC 的,那么请注意 ActiveSync 的连接设置那里,“这台计算机已连接到”选项如果选择的是单位网络,那么请使用计算机名访问,如果选择了 Internet 则使用 IP 地址访问。
//创建源SQLServer数据库连接对象
stringsrcConnString="DataSource=bjb-libo;InitialCatalog=Northwind;UserId=sa;Password=1234;";
SqlConnectionsrcConnection=newSqlConnection(srcConnString);
2) SQL Server CE 数据库连接要换成智能设备的文件路径,如果 Data Source 只设置文件名,那么示例程序将会在设备的根目录下创建 SQL Server CE 数据库文件。
//创建目标SQLServerCompactEdition数据库连接对象
stringdestConnString="DataSource=Northwind.sdf";
SqlCeConnectiondestConnection=newSqlCeConnection(destConnString);
3) 由于 .NET Compact Framework 只支持 string[] string.Split(params char[] separator),那么首先 SQL Server CE 数据库创建脚本中每条命令的分隔符 GO 需要替换成分号(';')。
CREATETABLEProducts(
ProductIDintNOTNULLCONSTRAINTPK_ProductsPRIMARYKEY,
ProductNamenvarchar(40)NOTNULL,
SupplierIDintNULL,
CategoryIDintNULL,
QuantityPerUnitnvarchar(20)NULL,
UnitPricemoneyNULL,
UnitsInStocksmallintNULL,
UnitsOnOrdersmallintNULL,
ReorderLevelsmallintNULL,
DiscontinuedbitNOTNULL
);
总结:在 Windows Mobile 上直接将远程 SQL Server 的数据导入到 SQL Server CE 中是可行的,并且利用 CopyTable 方法可以很轻松得实现多个表的数据导入。不过从智能设备直接访问 SQL Server 数据库存在一定的局限性,它比较适合局域网环境,并且需要开放 SQL Server 的端口。另外,我还没有测试过大数据量的导入,我担心会存在内存不足的问题。大家可以测试一下!