这是问题here
的后续内容ctacke说有关于SQL Server CE相关"问题"我/我正在:
" 问题(如错误文本所示)是SDF文件是由SQL Compact版本创建的,该版本与应用程序引用的SQL Compact版本不匹配。我不会专注于报告的版本号,只是知道它存在不匹配的事实。 如果您不知道SDF的版本,可以通过从SDF文件中读取几个字节来查找它。 SQL Compact数据库文件不是100%可传输的。你绝对不能从较新的版本中获取SDF并使用较旧的运行时加载它。 如果数据库是使用3.1创建的,则可以通过调用SqlCeEngine.Upgrade()将其升级到3.5。"
I know now有问题的.SDF文件是版本2.0
我应该使用" SqlCeEngine.Upgrade()"在我的代码中某处的技术?
基于C ++设置实用程序代码,两台设备(3090和3190,但我现在正在测试3190)应安装SQLCE 2:
cabModule installMC3090[] = {{_T("ceremote.sa1100.CAB"),_T("Microsoft Remote Display Control"),IDR_CEREMDISP,true},
{_T("netcf.all.wce4.armv4.cab"),_T("Microsoft .NET Compact Framework"),IDR_NETCF,false},
{_T("OpenNETCF.SDF.WCE4.ARMV4.CAB"),_T("OpenNETCF SDF v1.4"),(DWORD)0,true},
{_T("sql.wce4.armv4.CAB"),_T("Microsoft SQL Client"),IDR_SQLCLIENT,false},
{_T("sqlce.dev.wce4.armv4.CAB"),_T("Microsoft SQLCE 2.0 Dev"),IDR_SQLCEDEV,false},
{_T("sqlce.wce4.armv4.CAB"),_T("Microsoft SQLCE 2.0"),IDR_SQLCE,false},
{_T("symbol.all.arm.cab"),_T("Symbol Managed Class Libraries"),IDR_SYMBOL,false},
{_T("System_SR_enu.cab"),_T("Microsoft .NET CF 1.0 ENU-String Resource"),IDR_NETRESOURCES,false},
{_T("HHS_WCE4.ARMV4.CAB"),_T("SSCS HHS"),IDR_HHS,false},
{_T("END"),_T("END"),(DWORD)0,false}
};
//MC3190 includes .NET 3.5 in the default configuration
cabModule installMC3190[] = {{_T("ceremote.sa1100.CAB"),_T("Microsoft Remote Display Control"),IDR_CEREMDISP,true},
{_T("OpenNETCF.SDF.WCE4.ARMV4.CAB"),_T("OpenNETCF SDF v1.4"),(DWORD)0,true},
{_T("sql.wce4.armv4.CAB"),_T("Microsoft SQL Client"),IDR_SQLCLIENT,false},
{_T("sqlce.dev.wce4.armv4.CAB"),_T("Microsoft SQLCE 2.0 Dev"),IDR_SQLCEDEV,false},
{_T("sqlce.wce4.armv4.CAB"),_T("Microsoft SQLCE 2.0"),IDR_SQLCE,false},
{_T("symbol.all.arm.cab"),_T("Symbol Managed Class Libraries"),IDR_SYMBOL,false},
{_T("NETCFv35.Messages.EN.cab"),_T("Microsoft .NET CF 3.5 EN-String Resource"),IDR_NETRESOURCES,true},
{_T("HHS_WCE4.ARMV4.CAB"),_T("SSCS HHS"),IDR_HHS,false},
{_T("END"),_T("END"),(DWORD)0,false}
};
....虽然我找不到任何" SQLCE"设备上任何地方的文件...
我在实例化SqlCeEngine之后添加了对Upgrade()的调用:
engine = new SqlCeEngine(conStr);
engine.Upgrade(conStr); // <= this is new
......这可能是一件好事,因为现在错误的消息是另一个消息:
位置:DBConnection.DBConnection
异常:为源数据库指定的密码不正确[数据源= \我的文档\ HHSDB.SDF]
内部异常:[空白]
TypeFullName :System.Data.SqlServerCe.SqlCeException
StackTrace :ProcessResults,修复......
将其与Update 4 here中的内容进行比较(现在它是一个密码问题;之前它似乎是一个Sql Ce版本不匹配问题)。
好的,遗留代码(以前有效)似乎没有添加密码。密码通常如何&#34;加上&#34; (不是我甚至知道密码应该是什么)?有没有办法让它不要指望密码?
这是DBConnection实例化代码,可能会对此有所了解:
public class DBConnection
{
public string filename = HHSUtils.GetDataPath() + "HHSDB.SDF";
SqlCeConnection objCon = null;
SqlCeEngine engine;
private DBConnection()
{
try
{
// Connection String
//string conStr = "Data Source = " + filename; <== this is the legacy, but failing for some reason (see https://stackoverflow.com/questions/23438579/in-what-format-does-sqlceconnection-expect-its-connection-string-arg/23438672)
//string conStr = string.Concat("Data Source = ", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "HHSDB.SDF"));
filename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "HHSDB.SDF");
string conStr = string.Concat("Data Source = ", filename);
engine = new SqlCeEngine(conStr);
engine.Upgrade(conStr);
以前使用的GetDataPath(),它通过赋值给文件名来调用,但现在因为文件名被覆盖而没有用,只是:
public static string GetDataPath()
{
return @"\My Documents\";
}
这足以解决我的问题,只需附加&#34; Persist Security Info = False; &#34; la:
连接字符串Data Source=MyData.sdf;Persist Security Info=False;
? IOW,正在附加一种说法,&#34;忘记密码,我不依赖它们&#34;?
我还注意到上面的例子(来自here)在&#34; Source&#34;之间没有空格。和&#34; =&#34;和#34; =&#34;和SDF文件的路径。这是不重要的(因为我怀疑 - IOW,无论哪种方式都应该有效)?
也许更重要的是,我的连接字符串以打击开始(&#34;数据源= \我的文档&#34;)而这一点则不然。显著?
根据同一网站,如果我做需要密码,我估计会是这样的:
Data Source=MyData.sdf;Encrypt Database=True;Password=myPassword;
File Mode=shared read;Persist Security Info=False;
...或... ???
Altho ctacke说驾驶室安装并不是真正相关的,为了完整性/为了后代,我正在添加一些关于设备设置如何不同的说明:
标有星号的cab文件与其他设备的安装不同
3090 通过设置实用程序安装了8个驾驶室:
HHS_WCE4.ARMV4.CAB
*netcf.all.wce4.armv4.cab
OpenNETCF.SDF.WCE4.ARMV4.CAB
sql.wce4.armv4.CAB
sqlce.dev.wce4.armv4.CAB
sqlce.wce4.armv4.CAB
symbol.all.arm.cab
*System_SR_enu.cab
3190 通过设置实用程序安装了8个cab(安装实用程序中的注释表示&#34; MC3190包含默认配置中的.NET 3.5 &# 34):
*ceremote.sa1100.CAB
HHS_WCE4.ARMV4.CAB
*NETCFv35.Messages.EN.cab
OpenNETCF.SDF.WCE4.ARMV4.CAB
sql.wce4.armv4.CAB
sqlce.dev.wce4.armv4.CAB
sqlce.wce4.armv4.CAB
symbol.all.arm.cab
所以:
3090具有独特性:
netcf.all.wce4.armv4.cab
System_SR_enu.cab
3190具有独特性:
ceremote.sa1100.CAB
NETCFv35.Messages.EN.cab
两者升级到:
HHS_WCE4.ARMV4.CAB
symbol.all.arm.cab
(为什么这些&#34;升级出租车&#34;不是简单地添加到各自的安装列表中,我不知道 - 是否有&#34;升级&#34;选项?)
受到ctacke最新评论的启发(挑衅,刺激),我仔细查看了我在我的应用程序中的SQL CE参考资料,它看起来像是一种混合和混合的腐烂药水:
System.Data is runtime 2.0.0.0 and Version the same (2.0.0.0)
System.Data is from C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.Data.dll
System.Data.SqlClient is runtime version v2.0.50727 and Version 3.0.3600.0
System.Data.SqlClient is from C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\Client\System.Data.SqlClient.dll
System.Data.SqlServerCe is runtime version v2.0.50727 and Version 3.5.1.0
System.Data.SqlServerCe is from C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\System.Data.SqlServerCe.dll
也许这个女巫酿造至少与我的问题有关。
所以,我想,肯定这是弗兰肯斯坦和德古拉之间的一些交叉,我已经到了这里。这些相关文件必须全部存在于同一位置。所以我看了所有这些并发现了这个:
C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE
System.Data.dll == 2/14/2007
System.Data.SqlClient.dll == [not there]
System.Data.SqlServerCe.dll == [not there]
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\Client
System.Data.dll == [not there]
System.Data.SqlClient.dll == 7/3/2007
System.Data.SqlServerCe.dll == [not there]
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices
System.Data.dll == [not there]
System.Data.SqlClient.dll == [not there]
System.Data.SqlServerCe.dll == 2/12/2010
说不是这样!这真的是事情的立场 - 我必须从这里得到这个文件,从那里得到那个等等吗?
回应ctacke的评论:
&#34; 您引用的SQL CE版本必须与设备上的版本匹配到版本。我不能告诉你它应该是什么,只是它们必须是相同的,它们应该匹配到创建数据库文件的次要版本&#34;
我在设备上看不到任何SqlServerCe.dll;有一个名为&#34; Computer \ Clay的Device \\ Program Files \ Microsoft SQL Server Compact Edition \ v3.5&#34;具有以下DLL:
sqlceca35.dll
sqlcecompact35.dll
sqlceer35EN.dll
sqlceme35.dll
sqlceoledb35.dll
sqlceqp35.dll
sqlcese35.dll
(全部创建于2010年2月12日)
devie上还有一个文件夹,&#34;计算机\粘土设备\\ Windows \ SQLCE 2.0&#34;其中包含日期为8/16/2002和8/28/2002的文件:
ssce20.dll
ssceca.dll
ssceerror20en.dll
ssceerror20jp.dll
我假设最后两个用于显示错误消息,我假设最后一个用于日语,我认为我们没有任何日本客户(当然也没有日语的本地化版本的应用程序) ),这让人感到莫名其妙。
因此手持设备上根本没有SqlServerCe.dll,因此版本之间不会发生冲突 - 除非SqlServerCe.dll存在于某个地方但不可见?
作为更新5的后续内容和完整性&#39;缘故(前两个DLL文件可能是&#34;无趣&#34;):
我在整个硬盘上搜索了三个文件:
除了上面提到的以外,还发现了System.Data.dll :
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\WindowsCE
Creation Date = 11/24/2002; Size = 403KB
C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v2.0\Debugger\BCL
Creation Date = 2/14/2007; Size = 696KB
C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\Debugger\BCL
Creation Date = 10/10/2007; Size = 710KB
C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE
Creation Date = 10/10/2007; Size = 124KB
除了上面提到的地方之外,在几个地方找到了System.Data.SqlClient.dll ,但它们的大小都相同,除了:
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\WindowsCE
where it is 148KB (creation date of 9/24/2002)
除了上面提到的地方(C:\ Program Files(x86)\ Microsoft SQL Server Compact Edition \ v3.5 \ Devices)之外,还发现了System.Data.SqlServerCe.dll : / p>
C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\CompactFrameworkSDv1.0.50000\WindowsCE
9/24/2002; 124KB
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.1
12/22/2006; 236KB
同样在:
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Desktop
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Private
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Desktop
C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Private
-and in(与上面相同但在没有&#34;(x86)&#34;的Program Files文件夹中):
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop
C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Private
C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Desktop
C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private