2010-09-13 114 views
5

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

奇怪的是,在我的电脑 - 子字符串”文件:\“被添加到我原来的连接字符串,这可能是为什么抛出异常。 当我在调试模式中删除“file:\”子字符串时,在运行时,不会抛出异常。

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

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

请帮忙。 由于事先

+0

sdf文件是本地的吗?在子文件夹中?它在哪里?你能举一个你连接字符串的例子吗? – curtisk 2010-09-13 12:56:51

+0

是的,它是本地的。 它位于“C:\ solutionname \ projectname \ bin \ debug \ sdfname.sdf” 连接字符串:“file:\\ C:\\ solutionname \\ projectname \\ bin \\ debug \\ sdfname.sdf “ – George 2010-09-13 13:19:55

回答

0

由于Windows CE没有一个“当前目录”,实现通常获得当前正在运行的程序集的位置的目录看在。在一个桌面上,通过Assembly.GetExecutingAssembly().GetName().CodeBase返回的字符串包括方案前缀。

+0

什么是Assembly.GetexecutingAssembly()。GetName()。CodeBase? 以及如何解决该问题? – George 2010-09-13 15:37:31

+0

如果输入“sdfname.sdf”,则打开该文件的进程将不得不将其解析为“c:\ somefolder \ sdfname.sdf”。在Windows机器上,开发人员通常假定该文件位于当前文件夹中,但由于Windows CE设计没有“当前文件夹”,因此CE开发人员通常使用Assembly的路径。 – 2010-09-14 10:01:18

+0

在Windows CE上,此函数返回一个可用于未修改的路径以打开文件,而在完整框架中添加方案前缀(file:\\\)。我不知道相对于绝对的这种转换发生在哪里,如果它在第三方库中,您可以看到它们是否具有可以使用的完整框架版本而不是CF版本? – 2010-09-14 10:06:46

1

我不明白你为什么需要“file://”。它应该没有那么好。肯定它看起来不对,你有文件:\而不是文件://

+0

也许我没有正确解释自己。 “file:\”前缀是自动添加的 - 我没有添加它。这就是为什么抛出异常(而不是由框架)。 我不知道为什么会发生这种情况。 我希望找到该前缀的来源,并理解为什么会发生这种情况,但现在我甚至会在调用引发异常的函数之前直接在运行时删除它。不幸的是,连接字符串是私人的,因此 - 我无法访问它。 – George 2010-09-14 09:00:51

+0

你确实说得很清楚,我只是没有正确阅读。你的连接字符串应该是:“Data Source = c:\ db.sdf”。 – Bryan 2010-09-15 04:47:30