我一直在寻找一个很好的解决方案来实现在SQL Server Compact 3.5数据库上管理模式的想法.
我知道在SQL Server Express,SQL Server Standard,SQL Server Enterprise 上管理模式的几种方法,但Compact Edition不支持使用相同方法所需的必要工具.
有什么建议/提示吗?
我应该扩展这个说它是100多个带有包装软件的客户端.随着系统的变化,我需要将更新脚本与新二进制文件一起发布到客户端.我正在寻找一种不错的方法来发布它,而不必只是将客户端的脚本文件交给客户端并说"在SSMSE中运行它".大多数客户都无法做这样的野兽.
我的一个伙伴披露了关于如何处理我的任务的SQL Server部分的部分脚本,但从未在Compact Edition上工作过.看起来我会独自一人为此.
我认为我已经决定要做的,并且需要一个"极客周"来完成,就是编写一些类似于WiX和NAnt工作方式的工具,这样我就可以编写一个过于热心的XML文档处理工作.
如果我认为这是值得的,我会发布在CodePlex上和/或代码项目,因为我们使用这两个网站一点,以获得更好的理解概念的职位,我在过去所做的,我认为这回馈一点可能是值得的.
2010年5月3日编辑:
如果有人愿意"命名"该项目,我会将我为MS SQL编写的脏/讨厌版本上传到CodePlex,这样我们就可以开始攻击SQL Compact版本了.虽然,我认为在我计划的初始应用程序的下一版本中,我将放弃SQL Compact并仅使用XML文件进行存储,因为该软件正在从Installable包转换为Silverlight应用程序.Silverlight只是提供了更好的访问策略.
我有一个带有可选用户名字段的搜索表单.如果未提供用户名,则应返回所有匹配项.
我正在使用Linq和Sql Server CE 4.0.
linq代码如下所示 - >
from p in context.Accounts
where (name==string.Empty || p.UserName.Contains(name))
Run Code Online (Sandbox Code Playgroud)
使用Sql Server CE会引发以下错误
"此位置不允许使用参数.确保'@'符号位于有效位置,或者此SQL语句中的参数完全有效."
我可以采取其他方法在Linq中使用可选的Where子句吗?
仅供参考
from p in context.Accounts
where (string.IsNullOrEmpty(name) || p.UserName.Contains(name))
Run Code Online (Sandbox Code Playgroud)
给了我错误
"函数的指定参数值无效.[参数#= 1,函数名称(如果已知)= isnull]"}
这是因为Sql Server CE不支持IsNull.如果Name参数为Null,我只需执行以下操作.
if (name == null)
name = string.Empty;
Run Code Online (Sandbox Code Playgroud) 有什么方法可以将.csv或制表符描述的.txt中的数据快速导入到SQL Compact Edition 3.5表中?
我有大量无法手动输入的数据。
我知道如果想导入到基于服务器的SQL数据库中,可以使用BULK INSERT函数,但是此方法在SQL CE中不起作用。
我使用Visual Studio 2010,并且安装了SQL Server Management Studio。
任何帮助将不胜感激!
我有一个包含2个表的SqlServer Compact Edition数据库.
对于这些表中的每一个,我都有一个派生的上下文类DbContext,应用程序使用该上下文类来访问该表.
为了保持应用程序的不同组件分离,我不能拥有一个具有DbSet两个表属性的上下文类.相反,我需要有2个不同的上下文类,每个上下文都必须完全不知道另一个及其数据.
我正在使用代码优先方法,我的代码定义了实体和模型,我让Entity Framework为我创建数据库.
我的问题是:我怎样才能让Entity Framework在上下文初始化时自动为我创建数据库和表,但仍然有2个上下文共享相同的数据库和连接?
现在我得到的是,第一个上下文成功创建了数据库及其中的表,但是当我尝试创建第二个上下文时,我得到了,不出所料的是以下错误:
The model backing the 'SomeObjectContext' context has changed since the database
was created. Either manually delete/update the database, or call Database.SetInitializer
with an IDatabaseInitializer instance. For example, the DropCreateDatabaseIfModelChanges
strategy will automatically delete and recreate the database, and optionally seed it with
new data.
Run Code Online (Sandbox Code Playgroud)
没有一个IDatabaseInitializer适合我,因为我不希望在创建第二个上下文时删除整个数据库.我只想在现有数据库中创建第二个上下文表.
任何关于如何解决这个问题的建议将不胜感激.
谢谢
我有一个C#DateTime类,想知道我需要在SQL Server CE查询中将其格式化以将其插入到数据库中,我希望插入日期和时间.目前当我尝试其变体时我得到无效格式异常.
我正在使用的当前格式是:dd/MM/yyyy,希望做类似的事情dd/MM/yyyy hh:mm:ss.
我试图插入的方式是这样的:
( ( DateTime )_Value ).ToString( "dd/MM/yyyy hh:mm:ss" )
Run Code Online (Sandbox Code Playgroud)
显然hh:mm:ss不起作用,如果那不是dd/MM/yyyy在查询中成功执行的话.
我尝试了一些格式,包括我在谷歌上发现但迄今为止没有一种格式...
我最近安装了SQL 2008 R2
CREATE TABLE TPERSONS(
personid int PRIMARY KEY NOT NULL,
lastname varchar(50) NULL,
firstname varchar(50) NULL,
salary money NULL,
managerid int NULL -- foreign key to personid
)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我收到这个错误.
Major Error 0x80040E14, Minor Error 26302
)
The specified data type is not valid. [ Data type (if known) = varchar ]
Run Code Online (Sandbox Code Playgroud) 我想从现有的SQL Server CE数据库创建一个ADO.NET实体模型.但是当我想要的时候Generate Database from Model,没有SQLite提供者列表.只有SQL Server的那些.我已经安装了SQL Server Compact Toolbox和sqlite-netFx45-setup-bundle-x86-2012-1.0.89.0.exe.怎么了!我错过了什么?
谢谢,斯托沃
使用标准方法升级我的数据库需要7秒,这太慢了,因为我的数据库有3个表,每个表有5个字段,几乎没有数据.
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
//Update database to latest migration
migrator.Update();
Run Code Online (Sandbox Code Playgroud)
使用Entity Framework 6.0.
每次启动我的应用程序时,此代码都会运行,这会影响我的性能.为什么这么慢?无论如何要加快速度?
这是我的app.config:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
Run Code Online (Sandbox Code Playgroud) c# sql-server-ce entity-framework-4 ef-code-first ef-migrations
我在使用EntityFramework和以下数据模型时遇到了一些麻烦(参见简化图).

Matter对象可以被认为是"主要容器".有Bill和BillRecord.从Bill到BillRecord有一对多的关联.确切地说,Bill可以引用许多BillRecord(可能是0),BillRecord最多可以引用一个Bill.
1)我希望能够删除BillRecord但是如果存在关联则不应该删除Bill(这就是为什么我没有在BillRecords实体上设置OnCascadeDelete For Bill).同样,如果我删除一个账单,我不想删除可能与之关联的BillRecord.
2)然而,当我删除一个问题时,我希望一切都消失:问题,比尔和比尔记录.
使用以下代码,如果没有与Bill相关联的BillRecord,我设法有1)正确和2)工作,如果有,我得到以下错误.
System.Data.SqlServerCe.SqlCeException: The primary key value cannot be deleted because references to this key still exist. [ Foreign key constraint name = FK_dbo.BillRecordDboes_dbo.BillDboes_BillId ]
Run Code Online (Sandbox Code Playgroud)
这是我的实体和OnModelCreating的逻辑
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MatterDbo>().HasMany<BillRecordDbo>(s => s.BillRecordDbos)
.WithRequired(s => s.Matter).HasForeignKey(s => s.MatterId).WillCascadeOnDelete(true);
modelBuilder.Entity<MatterDbo>().HasMany<BillDbo>(s => s.BillDbos)
.WithRequired(s => s.Matter).HasForeignKey(s => s.MatterId).WillCascadeOnDelete(true);
}
public class MatterDbo
{
public MatterDbo()
{
BillDbos = new List<BillDbo>();
BillRecordDbos = new List<BillRecordDbo>();
}
public Guid Id { get; set; }
public virtual List<BillDbo> …Run Code Online (Sandbox Code Playgroud) 我有一个SQLCompact数据库,我试图使用ADO和访问C++.但是由于数据库的大小(300MB,超过默认的256MB限制),我必须Max Database Size在连接字符串中指定.但是这样做会导致.Open(...)函数抛出.
我正在使用的代码:
HRESULT hr = conn.CreateInstance(__uuidof(Connection), NULL);
conn->Open(L"Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source=test.sdf;Max Database Size=512", L"", L"",adConnectUnspecified);
Run Code Online (Sandbox Code Playgroud)
错误:
HR:DB_E_ERRORSOCCURRED
说明:"多步OLE DB操作生成错误.检查每个OLE DB状态值,如果可用.没有工作."
消息:"IDispatch错误#3105"
注意:
我尝试使用相同的代码,使用较小的数据库并Max Database Size从连接字符串中删除它,它按预期工作.Max Database Size再次添加会导致问题再次出现,因此我假设它是导致错误的问题.
有什么想法吗?如何使用Provider默认大小的数据库?
sql-server-ce ×10
c# ×5
sql ×4
sql-server ×3
ado ×1
c++ ×1
database ×1
datetime ×1
linq ×1
linq-to-sql ×1
sqlite ×1