设为首页 收藏本站
查看: 1164|回复: 0

[经验分享] 如何将数据导入到 SQL Server Compact Edition 数据库中(续)

[复制链接]

尚未签到

发表于 2016-11-7 00:52:00 | 显示全部楼层 |阅读模式
  在我发表了《如何将数据导入到 SQL Server Compact Edition 数据库中》一文后,有一位读者提出这样的疑问:示例程序是否能够在 PPC 上跑,直接从远程 PC 上的 SQL Server 数据库读取数据,导入到 PPC 上的 SQL Server CE 数据库中?

事实上是可以的!!!

.NET Compact Framework 支持智能设备应用程序直接访问远程的 SQL Server 数据库,命名空间还是原来的System.Data.SqlClient。不过,System.Data.SqlClient 命名空间下的类并不在System.Data.dll 程序集中,而是封装在一个独立的程序集System.Data.SqlClient.dll 中。这个程序集和它的安装包可以在“C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Client\v2.0”目录下找到。注意,这个程序集需要独立安装,它并不包含在 .NET Compact Framework 的安装包中。

DSC0000.png

为了证实这一点,我新建了一个叫 CopyTableMobileDemo 的 Visual C# 2005 智能设备项目,添加对 System.Data.SqlServerCe.dll 和 System.Data.SqlClient.dll 的引用,并从原来的示例程序复制了主要代码过来。

DSC0001.png

接下来有代码几个地方需要稍微修改一下。

1) SQL Server 数据库连接不能使用 IntegratedSecurity=True,要使用 User Id 和 Password。Data Source 要设置成 SQL Server 服务器的 IP 地址或者计算机名称。设置成 IP 地址还是计算机名称是有区别的。如果你的 Windows Mobile 设备或仿真器是通过 ActiveSync 连接到 PC 的,那么请注意 ActiveSync 的连接设置那里,“这台计算机已连接到”选项如果选择的是单位网络,那么请使用计算机名访问,如果选择了 Internet 则使用 IP 地址访问。

DSC0002.png


//创建源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(
ProductID
intNOTNULLCONSTRAINTPK_ProductsPRIMARYKEY,
ProductName
nvarchar(40)NOTNULL,
SupplierID
intNULL,
CategoryID
intNULL,
QuantityPerUnit
nvarchar(20)NULL,
UnitPrice
moneyNULL,
UnitsInStock
smallintNULL,
UnitsOnOrder
smallintNULL,
ReorderLevel
smallintNULL,
Discontinued
bitNOTNULL
);

CREATETABLEEmployees(
EmployeeID
intNOTNULLCONSTRAINTPK_EmployeesPRIMARYKEY,
LastName
nvarchar(20)NOTNULL,
FirstName
nvarchar(10)NOTNULL,
Title
nvarchar(30)NULL,
TitleOfCourtesy
nvarchar(25)NULL,
BirthDate
datetimeNULL,
HireDate
datetimeNULL,
Address
nvarchar(60)NULL,
City
nvarchar(15)NULL,
Region
nvarchar(15)NULL,
PostalCode
nvarchar(10)NULL,
Country
nvarchar(15)NULL,
HomePhone
nvarchar(24)NULL,
Extension
nvarchar(4)NULL,
Photo
imageNULL,
Notes
ntextNULL,
ReportsTo
intNULL,
PhotoPath
nvarchar(255)NULL
);

  4) 创建 SQL Server CE 数据库的方法也需要相应改动。
publicstaticvoidVerifyDatabaseExists(stringconnectionString)
{
using(SqlCeConnectionconnection=newSqlCeConnection(connectionString))
{
if(!File.Exists(connection.Database))
{
using(SqlCeEngineengine=newSqlCeEngine(connection.ConnectionString))
{
engine.CreateDatabase();

string[]commands=Properties.Resources.DbSchema.Split(';');

SqlCeCommandcommand
=newSqlCeCommand();
command.Connection
=connection;
connection.Open();
stringquery;
for(inti=0;i<commands.Length;i++)
{
query
=commands.Trim();
if(!string.IsNullOrEmpty(query))
{
command.CommandText
=query;
command.ExecuteNonQuery();
}
}
}
}
}
}


其他的地方都不需要修改,让我们看看运行的效果:

DSC0003.png DSC0004.png
DSC0005.png

总结:在 Windows Mobile 上直接将远程 SQL Server 的数据导入到 SQL Server CE 中是可行的,并且利用 CopyTable 方法可以很轻松得实现多个表的数据导入。不过从智能设备直接访问 SQL Server 数据库存在一定的局限性,它比较适合局域网环境,并且需要开放 SQL Server 的端口。另外,我还没有测试过大数据量的导入,我担心会存在内存不足的问题。大家可以测试一下!

示例代码下载:sqlce_data_import2.rar

作者:黎波
博客:http://upto.cnblogs.com/
日期:2007年8月8日

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296530-1-1.html 上篇帖子: sql笔试 下篇帖子: 工作学习笔记——用SQL语句新建SQL SERVER数据库、数据库用户以及登录名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表