【问题标题】:file share error if Sql Compact 4 in windows application如果 Windows 应用程序中的 Sql Compact 4 文件共享错误
【发布时间】:2014-09-20 00:35:45
【问题描述】:

我很抱歉,但我想要一个最终的答案。 首先,我长时间使用 SQL compact 3.5,制作表格需要很长时间,而且每个用户应用程序都可以正常工作,但现在我有客户想通过本地网络在 8 台计算机上运行我的软件,所以我说好的我尝试在服务器上共享数据文件.sdf 并使用它,但出现错误我不记得了所以我在互联网上搜索,我看到我必须 update to SQL compact 4 所以更新它,然后我得到这个愚蠢的错误 我不敢相信这些数据不支持这种类型的使用,并且在 SQL 紧凑型数据库上制作表格和其他东西需要很长时间,我的客户不会等我,这是什么原因 我的 SQL 语句是这样的:

dt = New SqlCeConnection("Data Source=" & dpaa & "\MoveData.sdf;Encrypt Database=True;Password=123cdswdaas;File Mode=Read Write;Persist Security Info=False")

【问题讨论】:

  • 最好的方法是将您的应用升级到 SQL Express。
  • 也许显示“愚蠢”的错误信息会更好。
  • 感谢您的回复,我不知道这个错误是否会显示在 sql express 中,升级到 sql express 需要很长时间,我的客户不会等我,所以我想要首先要知道 sql compact 4 是否可以共享,我希望可以使用

标签: sql-server sql-server-ce


【解决方案1】:

我认为先前的答案有点误导 - 您绝对可以将 SQL Server CE 4.0 与位于网络共享上的数据库文件一起使用。事实上,我现在正在我的一个活动项目中使用此功能。 “File Mode=Exclusive”参数不是必需的 - 在这种情况下,独占模式是唯一可用的模式。

这种方法的主要缺点是,由于整个 SDF 文件的排他锁定,在给定时间只有一个客户端能够读取或写入数据库文件。但是在某些情况下,您的环境(域策略等)中不可能拥有功能齐全的 SQL 服务器。在这种情况下,共享数据库文件是唯一可用的解决方案。

【讨论】:

    【解决方案2】:

    多个用户访问网络共享上的 SQL Compact 数据库.sdf 文件is not supported。为此,您应该使用 SQL Server Express 版本。 在 stackoverflow 上也有多个关于此主题的帖子。 3.5 版支持专门从网络共享打开 .sdf 文件,但 4.0 版不支持。但是没有 SQL CE 版本支持多个网络用户对 1 个 .sdf 文件的共享访问。

    但是升级您的应用程序以同时支持 SQL Express 和 SQL Compact 数据库可能是相对容易的任务。这取决于您的应用程序如何访问数据。例如,使用实体框架可以根据您的实际数据库连接生成查询。

    您还可以使用通用类 DbConnectionDbCommand 等来代替 SqlCeConnectionSqlCeCommand 等 - 因此您可以更改使用的数据库类型,而无需维护项目的两个单独版本。


    下载SQL Express 2014 with Tools SQLEXPRWT http://msdn.microsoft.com/cs-cz/evalcenter/dn434042.aspx。 (您最终也可以使用旧版本,例如 2008)SQL Server 具有比 SQL CE 更多的 SQL 功能和数据类型,因此请注意只使用与 SQL CE 兼容的东西。

    在你的 app.config 中有两个连接字符串:

    <add name="CompactDBConnection" connectionString="data source=|DataDirectory|\CE.sdf; password=xxxxxx; SSCE:Max Buffer Size=16384; temp file max size=256; ssce:autoshrink threshold=100; ssce:max database size=4091" providerName="System.Data.SqlServerCe.4.0" />
    <add name="ExpressDBConnection" connectionString="Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername; Password=myPassword;" providerName="System.Data.SqlClient" />
    

    然后您可以选择在应用启动时使用哪一个

    要创建 DbConnection,请检查此C# Retrieving correct DbConnection object by connection string

    这是一个使用DbCommand而不是SqlCeCommand调用存储过程的小例子:

                DbConnection dbConn = GetConnection(connStr); 
                DbProviderFactory sqlF = DbProviderFactories.GetFactory(dbConn);
                using (DbCommand b2bcmd = sqlF.CreateCommand())
                {
                    DbParameter msg = sqlF.CreateParameter();
                    msg.ParameterName = "@errorMessage";
                    msg.Direction = ParameterDirection.Output;
                    msg.DbType = DbType.String;
                    msg.Value = string.Empty;
                    msg.Size = 2048;                                        
    
                    b2bcmd.Connection = dbConn;
                    b2bcmd.CommandType = CommandType.StoredProcedure;
                    b2bcmd.CommandText = "PB2BImport";
                    b2bcmd.Parameters.Add(msg);
                    b2bcmd.ExecuteNonQuery();
    
                    result = Convert.IsDBNull(msg.Value) ? "N/A" : (string)msg.Value;
                }
    

    我假设您不使用实体框架 - 但使用它会更容易。

    【讨论】:

    • 所以我没有办法必须使用 sql express 所以最后一个问题是否可以将 sql compact 表转换为 sql express 和一件事
    • 什么是 sql express 的版本,我可以在 2008 年工作,否则我想要链接下载它,如果你有一些我可以遵循的东西,我可以尽可能快地完成这个任务非常感谢你的支持,你说的不是我想听到的,但我没办法,我正在等待你的回复开始
    • 好的,我现在正在安装它,但是如何将 sql 紧凑表转换为 sql express 这是一种简单的方法,否则我将从头开始重新创建所有表,请仍然与我一起,因为这是第一次这样做,没有时间犯错
    • 看这个博客,非常适合SQL CE问题erikej.blogspot.cz/2012/02/…
    • 如果用户独占使用.sdf文件(通过1个进程锁定整个数据库)用于支持它的3.5版本,请参阅此链接connect.microsoft.com/SQLServer/feedback/details/646333/…
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2012-10-26
    • 2018-12-18
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多