我想从Java访问Microsoft SQL Server Compact Edition数据库.我怎样才能做到这一点?我搜索了SQLCE的JDBC驱动程序,但我找不到.
因此,如此msdn页面所述,当您为SQL Server Compact 3.5定义连接字符串时,可以使用"数据目录"宏,如下所示:
从这个msdn页面引用:
数据目录支持
SQL Server Compact 3.5现在支持Data Directory宏.这意味着如果添加字符串| DataDirectory | (用管道符号括起来)到文件路径,它将解析为数据库的路径.例如,考虑连接字符串:
"数据源= c:\ program files\MyApp\Mydb.sdf"
使用数据目录时,您可以改为使用以下连接字符串:
"数据源= | DataDirectory |\Mydb.sdf"
有关更多信息,请参见如何:使用应用程序部署SQL Server Compact 3.5数据库.
但是,msdn上的"获取更多信息"链接实际上并没有提供更多信息.
所以我的问题是:
如何|数据目录| 宏在运行时翻译?对于WinForm应用程序,它似乎只是给出可执行文件的位置.还是比这更复杂?
.net sql-server connection-string sql-server-ce datadirectory
我正在使用SQL Server Compact Edition 4 CTP1,因为我想将它用作低流量Web应用程序的数据存储.当我尝试创建一个DataContext连接字符串指定System.Data.SqlServerCe.4.0(为了使用LINQ To SQL)时,我收到以下错误消息:
Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.
Run Code Online (Sandbox Code Playgroud)
那么为什么我的代码不使用SQL CE的第4版?
背景故事:我正在使用Visual Web Developer Express 2010进行开发,但我下载了WebMatrix测试版并使用其设计器创建了.sdf包含一些测试数据的SQL CE 4 文件.
使用这些SqlCeConnection/SqlCeCommand/SqlCeDataReader类,我成功创建了一个基本的MVC应用程序,它可以检索测试数据并显示它.SQL CE 4二进制文件将复制到应用程序的bin文件夹中.在我的控制器中:
var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString;
var tmp = new Dictionary<string, string>();
using(var conn = new SqlCeConnection(connectionString))
{
conn.Open();
using (SqlCeDataReader r = new SqlCeCommand("select * from ttest", conn).ExecuteReader())
{
while (r.Read())
{
tmp.Add(r["id"].ToString(), r["name"].ToString());
}
}
}
return View(new TestViewModel { …Run Code Online (Sandbox Code Playgroud) 我有一个使用新的SQL CE 4 CTP的ASP.NET 4站点.该站点在本地(Win7上的IIS 7.5)工作正常,在Server 2003/IIS 6中运行良好.在Server 2008上部署到IIS 7时失败.我得到的错误是:
访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))
有趣的是,如果我将应用程序池用户从其默认用户切换到LocalSystem,一切都很好.很明显,某处存在权限问题.
长话短说,有人知道在部署SQL CE 4数据库时需要设置哪些特殊权限?(顺便说一句,我们已经在db本身和c:\ windows\temp上设置了r/w访问权限)
谢谢!
我基于这个答案实现了双向1:1关系:
我这样定义双向关系:
public class Student
{
public virtual int StudentId { get; set; }
public virtual Anamnesis Anamnesis { get; set; }
. . .
}
public class Anamnesis
{
[Key, ForeignKey("Student")]
public int AnamnesisId { get; set; }
public virtual Student Student { get; set; }
. . .
}
Run Code Online (Sandbox Code Playgroud)
其中,学生是主要实体,Anamnesis是共享PK的实体.
现在我想创建的关系有一个Delete Rule = CASCADE.实际上,正在创建的关系具有Delete Rule = NO ACTION,如下图所示:

如果我在"表格属性"窗口中手动删除此关系并使用"删除规则"="CASCADE"添加其他关系,则代码将按照我的预期允许我删除学生并且它具有相同ID的共享Anamnesis.
所以,这是我的问题:
有没有办法在我的类中使用Data Annotation(不是Fluent API),以便获得与CASCADE删除规则的关系?我更喜欢使用Data Annotation但是如果不可能的话,我会对使用它的一些Fluent API代码感到满意.
注意
我已经尝试了这篇文章中显示的Fluent API代码.它在我有双向属性的情况下不起作用.
cascade sql-server-ce cascading-deletes ef-code-first entity-framework-4.1
有人可以指点我使用SQL CE进行SQL 2008 R2复制的演示或演练.
我们的想法是让客户端每天连接到我们的服务器并复制/同步他们的数据.
谢谢.
我正在尝试将实体添加到SQL CE 4,它具有byte []类型的属性.从msdn我已经发现只有图像类型可以容纳大文件(在我的情况下,它们不是那么大,但仍然超过二进制类型8000字节的限制).这是模型:
public class TabModel
{
[Key]
public Guid Id { get; set; }
public string Title { get; set; }
public string Subtitle { get; set; }
public string Artist { get; set; }
public string Album { get; set; }
public string Author { get; set; }
public string TabAuthor { get; set; }
public DateTime DateAdded { get; set; }
[Column("file",TypeName="image")]
public byte[] File { get; set; }
public TabModel()
{
Id = Guid.NewGuid();
DateAdded …Run Code Online (Sandbox Code Playgroud) 我想保存一些具有双向关系的实体(两端的导航属性).这是通过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) 我试图在安装了iis的Windows 7的干净安装上部署使用Entity Framework 6(Code First)和SQL Compact 4.0的基本MVC 4应用程序(未安装mvc 4和sql compact 4.0).
我在db项目上安装了以下nuget包:
在web.config中,我得到了以下配置:
<connectionStrings>
<add name="[Name]" connectionString="Data Source=|DataDirectory|[FileName].sdf" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>
......................
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</providers>
</entityFramework>
Run Code Online (Sandbox Code Playgroud)
Bin文件夹(sql ce文件位于amd64和x86文件夹中:
sql-server-ce ×10
.net ×2
c# ×2
sql-server ×2
asp.net ×1
cascade ×1
deployment ×1
java ×1
jdbc ×1
linq-to-sql ×1
sql ×1
transactions ×1