【问题标题】:sql connection string problemsql连接字符串问题
【发布时间】:2011-04-11 15:22:47
【问题描述】:

我在 *.sdf 文件中有数据库(紧凑型 sql 服务器)。 我将一个紧凑的框架项目转换为一个常规的 pc 项目,出于某种原因,使用相同的代码和相同的 *.sdf 文件引发了以下异常: "文件名无效。请检查数据库的文件名"

奇怪的是,在我的电脑上 - 子字符串“file:\”被添加到我的原始连接字符串中,这可能就是引发异常的原因。 当我在调试模式下删除“file:\”子字符串时,在运行时,不会抛出异常。

为什么要添加这个子字符串?它从何而来?我该如何解决这个问题?

最近我发现 app.config 文件丢失的事实可能存在某种联系。 这仍然没有解释原始连接字符串是如何存在的,只是添加了子字符串。

请帮忙。 提前致谢

【问题讨论】:

  • sdf 文件是本地的吗?在子文件夹中?它在哪里?你能举例说明你的连接字符串是什么样的吗?
  • 是的,它是本地的。它位于“C:\solutionname\projectname\bin\debug\sdfname.sdf”连接字符串:“file:\\C:\\solutionname\\projectname\\bin\\debug\\sdfname.sdf”

标签: c# .net sql windows-mobile compact-framework


【解决方案1】:

我不明白你为什么需要“file://”。如果没有它,它应该可以正常工作。当然,你有 file:\ 而不是 file://

【讨论】:

  • 也许我没有正确解释自己。“file:\”前缀是自动添加的——我没有添加它。这就是抛出异常的原因(不是我,是框架)。我不知道为什么会这样。我希望找到该前缀的起源并了解为什么会发生这种情况,但现在我什至会在调用引发异常的函数之前直接在运行时删除它。不幸的是,连接字符串是私有的,因此 - 我无法访问它。
  • 您确实说清楚了,我只是没有正确阅读。您的连接字符串应该是:“Data Source=c:\db.sdf”。
【解决方案2】:

由于 windows CE 没有“当前目录”,因此实现通常将当前运行的程序集的位置作为要查看的目录。在桌面上,Assembly.GetExecutingAssembly().GetName().CodeBase 返回的字符串包含该方案前缀。

【讨论】:

  • 什么是 Assembly.GetexecutingAssembly().GetName().CodeBase?我该如何解决这个问题?
  • 如果您输入“sdfname.sdf”,则打开该文件的进程必须将其解析为例如“c:\somefolder\sdfname.sdf”。在 Windows 机器上,开发人员通常假设文件在当前文件夹中,但由于 Windows CE 设备没有“当前文件夹”,CE 开发人员通常使用程序集的路径。
  • 在 Windows CE 上,这个函数返回一个可以不加修改地打开文件的路径,而在完整框架上,添加了一个方案前缀 (file:\\)。我不知道这种从相对到绝对的转换发生在哪里,如果它在第 3 方库中,您可以查看他们是否有可以使用的完整框架版本而不是 CF 版本?
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多