Tag: sql server ce

如何为多个进程共享SQL Server CE数据库文件(.sdf)?

我在SQL Server CE中有一个数据库。 将不同计算机的多个应用程序连接到数据库时会抛出exception。 这是例外: 存在文件共享冲突。 不同的进程可能正在使用该文件。 exception类型是“SqlCeException”。 这是我的连接字符串: Data Source=\\server\ProductionDB\ProductionControl.sdf;File Mode=Read Write; Max Database Size = 4000 SQL Server CE的版本是3.5 SP2

选择新添加的Row – DataGridView和BindingSource

我正在向绑定到DataGridView的BindingSource添加一个新的Row source.AddNew(); 在此之后,使用BindingSource获取新添加的行,当它排序时返回DataGridView中的下一行。 ROW “A” ROW “B” <- myBindingSource.AddNew(); ROW "C" myBindingSource.Current给出ROW“C”。 (它成为DataGridView中的选定行) 我需要这个,因为我想只更新新添加的行 DataRowView drv = (DataRowView)myBindingSource.Current; myTableAdapter.Update(drv.Row); 而不是整个表。 myTableAdapter.Update(myDataSet.myTable); 而且,我想在插入后在DataGridView中选择这个新添加的行。 有可能吗?

如何使用C#确定SQL Server CE表中是否存在列?

遗留代码以这种方式执行: public bool isValidField(string tableName, string fieldName) { bool retVal; string tblQuery = string.Format(“SELECT {0} FROM {1}”, fieldName, tableName); checkConnection(); try { SqlCeCommand cmd = objCon.CreateCommand(); cmd.CommandText = tblQuery; object objvalid = cmd.ExecuteScalar(); retVal = (null != objvalid); } catch { retVal = false; } return retVal; } ……但我发现它并不总是奏效。 在调用该方法并获得false ,一些代码ALTERS表添加了一些列,但我得到: 列ID在规范中出现多次。 我在StackOverflow上找到了几个有前途的SQL语句: if exists(select […]

如何连接SDF数据库? 我试过没有连接字符串似乎工作

我已尝试在我的本地数据库的连接字符串上进行50多次不同的尝试,似乎没有任何效果。 我本质上只是试图打开数据库文件的连接,所以我可以转储我从excel电子表格中提取的数据。 我正在使用Visual C#制作离线winform应用程序。 无论我在app.config中尝试什么连接字符串,它总是在尝试将“dReader”写入数据库时​​失败。 错误通常取决于我尝试的字符串: “建立与SQL Server的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。validation实例名称是否正确以及SQL Server是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 – 无法打开与SQL Server的连接)“ 我已经浏览了许多在线示例和资源,似乎没有任何工作。 我希望这里有人可以指出为什么会失败。 这是我最新forms的app.config: 这是我的表单代码: 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 […]

EF 5 + SQL Server CE 4:如何为数据库文件指定自定义位置?

我正在开发一个需要一个小型本地数据库的客户端系统。 我想避免安装SQL Server Express,并决定使用SQL Server 4。 我使用Entity Framework 5进行数据访问,并创建了自定义上下文。 在开发中一切正常,我可以使用app.config来设置特定的文件位置或动态Data Source=|DataDirectory|\MyDatabase.sdf 。 但在部署时,我希望数据库位于users documents文件夹中: \My Documents\ApplicationName\MyDatabase.sdf 我怎样才能做到这一点? 我只需要能够在代码中设置自定义连接字符串! 这是我到目前为止所尝试的: private MyApplicationDataContext(string connectionString) : base(connectionString) { } public static MyApplicationDataContext CreateInstance() { var directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var path = Path.Combine(directory, @”ApplicationName\MyDatabase.sdf”); //var connectionString = string.Format(“provider=System.Data.SqlServerCe.4.0;provider connection string=\”Data Source={0}\””, path); var connectionString = string.Format(“Data Source={0}”, path); return […]

使用Entity Framework异步方法和SQL Server Compact阻止行为

我有一个MVVM应用程序调用数据服务来获取一些数据绑定。 数据服务通过Entity Framework 6访问SQL Server Compact(v4.0)数据库。 数据(当前)需要几秒钟才能加载,当同步调用时(这并不奇怪)会阻止GUI线程。 我假设大部分都是IO绑定所以我添加了一个等效的Async方法以异步方式执行数据加载,以允许GUI保持响应。 但是,当我使用EF Async方法时,它似乎没有任何区别,GUI线程仍会阻塞大致相同的时间。 我知道使用Async调用不会将工作移动到不同的线程,但是我已经假定这个活动的大部分是IO绑定的。 因此,使用EF Async方法应该允许调用(GUI)线程继续做其他工作,但它没有任何区别。 例如,如果我编写LoadData方法以使用EF同步加载方法,则GUI将阻塞,直到加载数据: public ObservableCollection GetData() { //Do IO bound activity… Context.DataTable1.Include(…).Load(); //for demo purposes, just return some data return Context.DataTable1.Local; //(ObservableCollection) } 加载数据的Async方法如下所示: public async Task<ObservableCollection> GetDataAsync() { //Do IO bound activity… var task = Context.DataTable1.Include(…).LoadAsync(); await task; //for demo purposes, just return […]

如何在C#中将SQL Server Compact Edition数据库连接到Crystal Report

我正在尝试将我的SQL Server Compact Edition数据库连接到Crystal Report。 我一整天都在搜索,到目前为止我在其他网站上发现了许多与之相关的问题,但没有一个有可靠的答案。 我也在这个网站上发现了这个问题 ,要求提供VB.Net解决方案。 这个链接遍布互联网,并且有一种令人困惑的方式来通过XML来实现,我无法弄明白。 SQL Server和Access中的解决方案还有其他链接没有帮助。 SQL Server解决方案 访问解决方案 我想知道是否有一种简单的方法将SQL Server CE数据库连接到Crystal Report实际上有效?

C#4.0 / EF – SQL Server Compact不支持服务器生成的密钥和服务器生成的值

我刚刚将我的一个项目移动到VS2010 / fx4.0中,并使用SQL CE数据库作为后备存储。 自从将其移至此版本的.NET后,我现在收到此错误: SQL Server Compact不支持服务器生成的密钥和服务器生成的值。 我的表是用UserName(字符串)和DoorOpen(datetime)的PK定义的,因为SQLCE 要求 fx3.5中的每个表都有一个PK。 现在我在fx4.0中,我很难过。 我用Google搜索了这个,我找到的每个答案都是: SQLCE不支持自动生成值(我当然不需要),因此在其上放置一个GUID ID并从代码中填充它。 我试过这种方法,我仍然得到同样的错误! SQLCE: CREATE TABLE [ImportDoorAccesses] ( [RawData] nvarchar(100) NOT NULL, [DoorOpen] datetime NOT NULL, [UserName] nvarchar(100) NOT NULL, [CardNumber] bigint NOT NULL, [Door] nvarchar(4000) NOT NULL, [Imported] datetime NOT NULL, [ID] uniqueidentifier NOT NULL — new column ); ALTER TABLE […]

在C#中,Int64不等于long吗?

我一直在使用SqlCeConnection在C#中使用SQL和数据库。 我一直在使用ExecuteReader来读取读入Longs的记录ID的结果和BigInt值。 今天我一直在玩SQL语句,这些语句使用基于COUNT的语句(’SELECT COUNT(*)FROM X’)并且一直在使用ExecuteScalar来读取这些单值结果。 但是,我遇到了一个问题。 我似乎无法将值存储到Long数据类型中,我一直在使用它。 我可以将它们存储到Int64中。 我一直在使用BigInt获取记录ID以获得最大可能的记录数。 因此,BigInt 8字节是Int64。 长度是否等于Int64,因为两者都是64位有符号整数? 因此,为什么我不能将Int64转换为Long? long recordCount =0; recordCount = (long)selectCommand.ExecuteScalar(); 错误是: 指定演员表无效。 我可以将BigInt读成Long。 这不成问题。 我无法读取SQL COUNT到long。 COUNT返回一个Int(Int32),所以问题实际上是将Int32转换为long。

连接字符串中的%APPDATA%不替换实际文件夹?

当使用WPF和entity framework时,我有一个APP.CONFIG,如下所示: 使用此代码时,它始终抛出以下错误: System.Data.EntityException: The underlying provider failed on Open. —> System.Data.SqlServerCe.SqlCeException: The path is not valid. Check the directory for the database. [ Path = %APPDATA%\Folder\Database.sdf ] 当我从命令提示符运行路径“%APPDATA%\ Folder \ Database.sdf”它工作正常,如果我删除“%APPDATA%并硬编码路径它工作正常 – 所以它看起来像%APPDATA%是只是没有替换实际的文件夹… 谢谢,