惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - 婕舞飞扬

北京燃气集团 一个女软件工程师的征婚启示(淡淡的感人) 丹东思凯公司承担的吉林水务集团同城联网及银行代缴平台系统项目正式运行 万事随缘,不可强求! 新能源 我的座右铭 吉林同城联网系统 休闲以下 Computer操作技巧之IIS篇 net通过oledb 和ibm自带连接方式,连接db2数据库出错 - 婕舞飞扬 - 博客园 ADO.NET连接数据库字符串 - 婕舞飞扬 - 博客园 vs2005调试问题及解决方案锦集 拉大锯,扯大锯,姥家门口唱大戏 如何解决 SQL Server 2000 中的连接问题 ASP.NET中文彩色验证码实现 了解.NET Micro Framework技术 如何将数据导入到 SQL Server Compact Edition 数据库中(四) 如何将数据导入到 SQL Server Compact Edition 数据库中(三) 如何将数据导入到 SQL Server Compact Edition 数据库中(一)
如何将数据导入到 SQL Server Compact Edition 数据库中(二)
婕舞飞扬 · 2008-02-11 · via 博客园 - 婕舞飞扬

在我发表了《如何将数据导入到 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 的安装包中。

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

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

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

// 创建源 SQL Server 数据库连接对象
string srcConnString = "Data Source=bjb-libo;Initial Catalog=Northwind;User Id=sa;Password=1234;";
SqlConnection srcConnection 
= new SqlConnection(srcConnString);

2) SQL Server CE 数据库连接要换成智能设备的文件路径,如果 Data Source 只设置文件名,那么示例程序将会在设备的根目录下创建 SQL Server CE 数据库文件。

// 创建目标 SQL Server Compact Edition 数据库连接对象
string destConnString = "Data Source=Northwind.sdf";
SqlCeConnection destConnection 
= new SqlCeConnection(destConnString);

3) 由于 .NET Compact Framework 只支持 string[] string.Split(params char[] separator),那么首先 SQL Server CE 数据库创建脚本中每条命令的分隔符 GO 需要替换成分号(';')。

CREATE TABLE Products(
    ProductID 
int NOT NULL CONSTRAINT PK_Products PRIMARY KEY,
    ProductName 
nvarchar(40NOT NULL,
    SupplierID 
int NULL,
    CategoryID 
int NULL,
    QuantityPerUnit 
nvarchar(20NULL,
    UnitPrice 
money NULL,
    UnitsInStock 
smallint NULL,
    UnitsOnOrder 
smallint NULL,
    ReorderLevel 
smallint NULL,
    Discontinued 
bit NOT NULL
);
CREATE TABLE Employees(
    EmployeeID 
int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY,
    LastName 
nvarchar(20NOT NULL,
    FirstName 
nvarchar(10NOT NULL,
    Title 
nvarchar(30NULL,
    TitleOfCourtesy 
nvarchar(25NULL,
    BirthDate 
datetime NULL,
    HireDate 
datetime NULL,
    Address 
nvarchar(60NULL,
    City 
nvarchar(15NULL,
    Region 
nvarchar(15NULL,
    PostalCode 
nvarchar(10NULL,
    Country 
nvarchar(15NULL,
    HomePhone 
nvarchar(24NULL,
    Extension 
nvarchar(4NULL,
    Photo 
image NULL,
    Notes 
ntext NULL,
    ReportsTo 
int NULL,
    PhotoPath 
nvarchar(255NULL
);

4) 创建 SQL Server CE 数据库的方法也需要相应改动。

public static void VerifyDatabaseExists(string connectionString)
{
    
using (SqlCeConnection connection = new SqlCeConnection(connectionString))
    {
        
if (!File.Exists(connection.Database))
        {
            
using (SqlCeEngine engine = new SqlCeEngine(connection.ConnectionString))
            {
                engine.CreateDatabase();
string[] commands = Properties.Resources.DbSchema.Split(';');

                SqlCeCommand command 
= new SqlCeCommand();
                command.Connection 
= connection;
                connection.Open();
                
string query;
                
for (int i = 0; i < commands.Length; i++)
                {
                    query 
= commands[i].Trim();
                    
if (!string.IsNullOrEmpty(query))
                    {
                        command.CommandText 
= query;
                        command.ExecuteNonQuery();
                    }
                }
            }
        }
    }
}

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


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

示例代码下载:

sqlce_data_import2.rar

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