我一直在准备提供有关SQL Server Compact Edition 3.5(SP1 - 最近发布)的演示文稿,我想知道是否有人设计(或考虑设计)具有SQL Server CE 3.5(或更早版本)的系统?
特别是,有没有人想过(或经历过)使用SQLCE作为离线数据存储的解决方案(作为连接系统设计的一部分)?
与其前辈相比,3.5版看起来相当丰富,是否已经准备好进行认真考虑(现在它支持LINQ to SQL,标识列和各种重要的T-SQL)?
如果你需要一个轻量级的低占用空间的基于文件的数据库(特别是如果它需要在移动设备和桌面系统上支持),或者有更好的选择,你会考虑使用它吗?
我正在使用Visual Studio 2008.我是sqlce的新手.我正在检查sdf文件,如果sdf不存在,我创建然后插入大约5000行到我的sqlce db.If sdf存在,首先我删除所有表的行然后将这些记录插入到现有的表中.插入完成后,我正在压缩数据库.顺便说一句,压缩持续大约13秒.我知道一个调用Shrink.Shrink和Compact的方法使db变小但是在这个scenerio中我应该使用哪个?如何在更短的时间内进行压缩?我不需要备份sdf和紧凑后,我删除旧的sdf.i阅读这个主题但无法决定我应该使用.
我正在使用VS2008为Windows CE 5.0设备(Datalogic Kyman)创建Compact Framework应用程序.我在我的应用程序中使用SQL Server Compact 3.5.但是,我正在调试仍然安装了Windows CE 4.2的Kyman(通过USB使用移动设备中心连接).我的问题:
VS2008无法识别设备上已安装SQL Server Compact并要求我每次从IDE运行应用程序时都安装SQL Server Compact .安装程序向我显示有关SQL Server Compact CAB文件不适用于此设备的警告,但安装工作没有错误,应用程序也正常工作.
我已经取消选中"始终部署最新的.NET版本"这个框(不知道它的英文名称是什么,使用德语VS2008),但这没有用.
如何在每次启动应用程序之前告诉Visual Studio 不要安装SQL Server?
我已尝试在我的本地数据库的连接字符串上进行50多次不同的尝试,似乎没有任何工作.我本质上只是试图打开数据库文件的连接,所以我可以转储我从excel电子表格中提取的数据.我正在使用Visual C#制作离线winform应用程序.
无论我在app.config中尝试什么连接字符串,它总是在尝试将"dReader"写入数据库时失败.
错误通常取决于我尝试的字符串:
"建立与SQL Server的连接时发生与网络相关或特定于实例的错误.未找到服务器或无法访问服务器.验证实例名称是否正确以及SQL Server是否配置为允许远程连接.(提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)"
我已经浏览了许多在线示例和资源,似乎没有任何工作.我希望这里有人可以指出它为什么会失败.
这是我最新形式的app.config:
<connectionStrings>
<add name="DDP_Project.Properties.Settings.DDP_DatabaseConnectionString"
connectionString="Data Source=E:\Other DDP Projects\DDP_Project_SDF\DDP_Project\DDP_Database.sdf;"
providerName="Microsoft.SqlServerCe.Client.3.5" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
这是我的表单代码:
private void Profiles_Click(object sender, EventArgs e)
{
profilesDialog.FileName = "[YOUR_UPLOAD_FILE_HERE]";
var result = profilesDialog.ShowDialog();
if (result == DialogResult.OK)
{
HandleFileSelection();
}
}
private void HandleFileSelection()
{
var file = profilesDialog.FileName;
// Create a connection to the file datafile.sdf in the program folder
string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\DDP_Database.sdf";
SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile);
string …Run Code Online (Sandbox Code Playgroud) 我有以下型号:
public class Blog
{
public int BlogID { get; set; }
public int CategoryID { get; set; }
[MaxLength(70)]
[Required]
public string BlogTitle { get; set; }
[Column(TypeName="ntext")]
public string BlogContent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已手动将字段设置为数据库中BlogContent的ntext类型(16字节)SQL CE4.
但是,每次我尝试插入超过4000个字符的文本时,都会出现以下错误:
一个或多个实体的验证失败.有关详细信息,请参阅"EntityValidationErrors"属性
我试过设置注释[Column(TypeName="ntext")],但这没有区别.当我循环EntityValidationErrors收集时,问题是由BlogContent错误引起的:
字符串不能超过4000个字符
如何定义我的模型以获得ntext字段BlogContent?
似乎忽略了任何数据注释; 假设MaxLength默认情况下,no的字符串限制为4000个字符.
我正在尝试用SQL CE学习C#,以便我的程序可以记住东西.
我创建了一个数据库,可以连接到它:
SqlCeConnection conn =
new SqlCeConnection(@"Data Source=|DataDirectory|\dbJournal.sdf");
conn.Open();
Run Code Online (Sandbox Code Playgroud)
并且它连接正确,我想因为如果我重命名dbJournal.sdf错误它不调试正确.
假设我想做一个简单的SELECT查询.
(SELECT * FROM tblJournal)
Run Code Online (Sandbox Code Playgroud)
怎么做的?
简单的插入怎么样?
(INSERT TO tblJournal (column1, column2, column2) VALUES
(value1, value2, value3))
Run Code Online (Sandbox Code Playgroud)
我习惯了PHP和MySQL(正如你可以看到的那样:o))
我想保存一些具有双向关系的实体(两端的导航属性).这是通过2次调用来完成的context.SaveChanges().
[关于我的模型,映射以及我如何到达那里的完整细节都在折叠之后.]
public void Save(){
var t = new Transfer();
var ti1 = new TransferItem();
var ti2 = new TransferItem();
//deal with the types with nullable FKs first
t.TransferIncomeItem = ti1;
t.TransferExpenseItem = ti2;
context.Transfers.Add(t);
context.Operations.Add(ti1);
context.Operations.Add(ti2);
//save, so all objects get assigned their Ids
context.SaveChanges();
//set up the "optional" half of the relationship
ti1.Transfer = t;
ti2.Transfer = t;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,但如果在两次调用之间发生雷击,确保数据库不一致怎么样SaveChanges()?
输入TransactionScope...
public void Save(){
using (var tt = new TransactionScope())
{ …Run Code Online (Sandbox Code Playgroud) INSERT如果SQL Server CE数据库表中尚不存在,UPDATE如果它存在,我怎么能连续存在?
我已经尝试了很多SQL查询并不断收到错误.这不起作用.
IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
INSERT INTO Table1 VALUES (...)
Run Code Online (Sandbox Code Playgroud)
更新:
我发现这对我有用.任何其他好的建议都是受欢迎的.
INSERT INTO Table1 VALUES (...)
SELECT (........)
WHERE NOT Exists (SELECT ........)
-- INSERT with Default value if not exist. Next, UPDATE it
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
Run Code Online (Sandbox Code Playgroud) 我意识到这是一个讨论很多的话题,但我看到的所有建议似乎都涉及直接访问SQL Server,在我们的实例中并不理想.
我们的场景是一个远程SQL Server数据库(例如)100个表.我们正在开发一个轻量级桌面应用程序,它将使用SQL Server Compact数据库并定期与远程服务器同步(例如)20个表的子集.
我想控制复制的发生方式,因为速度是我们的主要问题,因为远程服务器距离数千英里远.
此外,我不需要同步每个表中的所有记录 - 只有与每个用户相关的记录.
我非常喜欢SQL Merge工具,但它要求客户端连接到远程SQL Server.目前这是不可能的,我们正在考虑通过我们的应用程序或其他方法访问的Web服务与远程服务器连接.
欢迎任何建议.
UPDATE
只是为了澄清,互联网连接是间歇性的,这是我们需要同步这两个数据库的主要原因.
我正在构建一个.NET断开连接的客户端 - 服务器应用程序,它使用Entity Framework 5(EF5)从POCO生成SQL Server CE 4.0数据库.该应用程序允许用户从网络SQL Server执行数据的批量复制到客户端的SQL Server CE数据库.由于EF5创建的约束和索引,这非常(非常)缓慢.暂时删除约束和索引会将30分钟的等待时间减少到1分钟或更短.
在开始批量复制之前,应用程序执行查询以从SQL Server CE表中删除约束和索引.但是,命令失败,因为EF5创建的约束名称包括表模式名称,点和表名称.由于解析问题,约束名称中的点导致drop命令失败.
例如,POCO 使用主键约束Customer创建表.数据库按预期执行.dbo.CustomerPK_dbo.Customer_Id
但是,在执行非查询时:
ALTER TABLE Customer DROP CONSTRAINT PK_dbo.Customer;
Run Code Online (Sandbox Code Playgroud)
SQL Server Compact ADO.NET数据提供程序返回错误:
解析查询时出错.
[令牌行号= 1,令牌行偏移= 57,令牌错误=.]
当然,使用DataContext没有外键的辅助对象生成没有约束的数据库,然后在以后添加它们的工作; 但是,这需要维护两个DataContext对象,并希望不要忘记保持更新.因此,我正在寻找两种解决方案之一:
以这样的方式编写DROP语句.字符被解析
防止EF5使用.约束和索引名称中的字符
预先感谢您的帮助!
sql-server-ce ×10
c# ×3
sql ×3
sql-server ×2
.net ×1
code-first ×1
database ×1
ntext ×1
poco ×1
transactions ×1
web-services ×1
windows-ce ×1