我知道这与此问题类似,但我在C#中使用SQL Server CE 3.5和WinForms项目.如何确定表是否存在?我知道IF关键字不受支持,但是EXISTS.在我可以查询它的CE中是否存在information_schema?谢谢.
我正在尝试将图像存储/保存在SQL Compact Edition(CE)数据库中.
我将学生模型中的字段声明为:
[Column(TypeName = "image")]
public byte[] Photo { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用Photo列的图像数据类型创建数据库,如下所示:

问题是:
当我运行应用程序并尝试使用3 MB的照片保存学生时(例如),我得到一个例外:
validationError.ErrorMessage = "The field Photo must be a string or array type
with a maximum length of '4000'."
Run Code Online (Sandbox Code Playgroud)
SQL Server CE支持这些数据类型.在SQL Express和SQL Compact Edition(CE)之间的比较中,我们得知SQL CE通过使用图像数据类型来支持二进制(BLOB)存储.
Image =可变长度二进制数据,最大长度为2 ^ 30-1(1,073,741,823)字节.存储是以字节为单位的值的长度.
图像应该完成我认为的工作.
我在这做错了什么?这是一个错误吗?
注意:
我还尝试了MaxLength数据注释:
[Column(TypeName = "image")]
[MaxLength(int.MaxValue)]
public byte[] Photo { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我得到这个例外:
Binary column with MaxLength greater than 8000 is not supported.
Run Code Online (Sandbox Code Playgroud)
编辑:
我找到了有关EF 4.1发布的 …
image code-first sql-server-ce entity-framework-4.1 asp.net-mvc-3
我想知道是否有类似Sql Profiler for Sql Server Compact Edition的东西?我使用SqlCE作为桌面应用程序的后端,对于这个嵌入式数据库来说,拥有像sql profiler这样的东西真的很棒.或者至少与NHibernate show_sql功能类似的东西...任何想法?谢谢j.
我使用SQL Server Compact 3.5 开发了一个应用程序(100%本地,无法访问服务器),它在我的计算机上运行良好.但是,当我在另一台计算机上部署它时,它显示以下错误:
Access to the database file is not allowed. [ File name = data\BDApepucCE.sdf ]
Run Code Online (Sandbox Code Playgroud)
我部署在Windows XP计算机上.每当我尝试在数据库上写入时它都会显示此错误,但是,当我阅读时它会起作用.
我在Windows 7计算机上进行了测试,它工作率为100%,除非通过家庭组(即本地网络)访问该文件,但在读取/写入时它都失败了.
平台:Windows 7,Visual Studio 2010和.NET 4 Client Profile
[已编辑 - 有答案]
以下是我以编程方式创建SQL CE数据库的代码:
/* get the Path */
var directoryName = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var fileName = System.IO.Path.Combine(directoryName, "Foo2Database.sdf");
/* check if exists */
if (File.Exists(fileName))
File.Delete(fileName);
string connStr = @"Data Source = " + fileName;
/* create Database */
SqlCeEngine engine = new SqlCeEngine(connStr);
engine.CreateDatabase();
/* create table and columns */
using (SqlCeConnection conn = new SqlCeConnection(connStr))
{
using (SqlCeCommand cmd = new SqlCeCommand(@"CREATE TABLE FooTable (Foo_ID int, FooData NVARCHAR(200))", conn))
{
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 我在SQL Server CE中创建了一个表,并意识到它不支持varchar.
仔细研究一下,我发现"不支持非Unicode文本列(varchar,char,text)和smallmoney;虽然支持nvarchar,nchar,ntext和money",如MSDN所述.
这是真的?这究竟是为什么?似乎一个紧凑的数据库将支持需要较少字节存储的数据类型......我假设它需要更多空间来保存Unicode字符.
这背后的原因是什么?
如何在sqlCE数据库中获取所有表名?
我在sqlCE(sdf文件)中有数据库,我需要得到表的所有名称
怎么做 ?
提前致谢
我使用VS2008中的内置设计器设计了我的SQL CE表.我为一对夫妇选择了错误的名字.我现在完全陷入困境,试图找到重命名它们的方法.
我拒绝相信这样的功能可能会被"遗忘".如何使用VS2008设计器或免费的独立应用程序重命名现有表?
我在重命名SQL Server Compact Edition中的列时遇到问题.我知道您可以使用重命名表sp_rename,但这不适用于列.
我已经寻找替代方案,但还没找到.
我可以删除列,然后在特定列之后添加新列吗?如果我删除列并在指定的列之后添加它,数据会丢失吗?
看来,一旦你创建了表,它就无法正确修改 - 这是SQLCE的另一个限制吗?
我想获取特定表的当前标识值,如sql server中的IDENT_CURRENT('table')
sql-server-ce ×10
sql ×6
c# ×4
sql-server ×2
.net ×1
code-first ×1
image ×1
profiler ×1
rename ×1
ssms ×1
t-sql ×1