从 SQL Server CE 检索记录 [这个星球上有人可以解决这个问题吗??]

Posted

技术标签:

【中文标题】从 SQL Server CE 检索记录 [这个星球上有人可以解决这个问题吗??]【英文标题】:Retrieving records from SQL Server CE [is anybody on this planet can solve this issue??] 【发布时间】:2013-07-28 17:11:00 【问题描述】:

我已将数据库包含在我的项目中(在根目录下)。

连接字符串

Data Source=|DataDirectory|\TSM_DB.sdf;Password=xxx;Persist Security Info=True;Max Database Size=512

TSM_DB.sdf属性:

构建操作 = 内容 复制到输出目录 = 如果更新则复制

数据集属性:

构建操作 = 无 复制到输出目录 = 不要复制

我的问题:

当我尝试将数据插入数据库时​​,它会插入到存在于 Debug 文件夹 中的数据库中,而不是插入到项目中包含的数据库中...

这就是为什么(显然)我的 select 语句在数据库中找不到任何记录(根据我的连接字符串)...

我认为查询(代码)非常好,但需要进行一些设置。

我该如何解决这个问题?

编辑:

Example Select Code (working : when connection string path is Absolute)

Try
        Dim cnt_temp
        Dim SQLquery As String
        Dim myConString As String = My.Settings.TSM_DBConnectionString
        con.ConnectionString = myConString
        SQLquery = "SELECT * FROM tbl_outward"
        Dim DA As SqlCeDataAdapter, Ds As New DataSet, Dtb As New System.Data.DataTable
        DA = New SqlCeDataAdapter(SQLquery, con)
        DA.Fill(Ds)
        Dtb = Ds.Tables(0)
        cnt_temp = Dtb.Rows.Count
        MsgBox(cnt_temp)
        con.Close()
    Catch ex As Exception
        MsgBox("Error..!", MsgBoxStyle.Exclamation)
    End Try

【问题讨论】:

不,您的连接字符串包含 |DataDirectory|这是一个替换字符串,对于 WInForms 应用程序来说,在 Visual Studio 中运行时是 BIN\DEBUG 目录,而在程序独立运行时是当前目录。我认为您的选择查询有问题。请出示代码 @Steve:我的选择查询很好。可能是,问题出在数据库的选择上。我已经编辑了我的问题,请看.. 连接字符串的绝对路径对我来说是不可接受的,例如 Data Source=C:\Company\Software\TSM_DB.sdf;.....请建议,我该怎么办? 不,SELECT 似乎是正确的。我想插入使用相同的连接,那么您确定插入成功吗?能否展示一下 INSERT 方法的代码? ** 我的问题:当我尝试将数据插入数据库时​​,它会插入到 Debug 文件夹中存在的数据库中,而不是项目中包含的数据库中... ** 这是它应该如何与 |DataDirectory| 一起工作。如果要使用填充数据库部署项目,则需要将填充数据库复制到项目中。 【参考方案1】:
当我尝试将数据插入数据库时​​,它会插入到 Debug 文件夹中存在的数据库中,而不是插入到项目中包含的数据库中...

这正是你告诉它要做的,也是你想要的。项目文件夹中的数据库是源代码的一部分。当您测试或调试代码时,更改的数据是您的测试或临时调试输出的一部分,而不是您的源代码。

当您测试您的代码时,您希望测试覆盖您的源代码吗?我希望不会,那会破坏你的资源;当你部署你的项目时,你通常不会部署你的源代码。您的数据也是如此;项目中的数据是应用程序的一部分,不是最终用户数据。当您安装应用程序时,您的源数据会安装到DataDirectory,这是您的应用程序的一部分,而不是用户数据;用户甚至可能无法对其进行写入。

当您卸载或更新您的应用程序时,DataDirectory 将被卸载或更新。您不想对用户的数据这样做;如果每次更新 Microsoft Word 时都会删除驱动器上的每个 Word 文件,您会喜欢吗?如果 Word 将用户数据存储在其等效的 DataDirectory 中,就会发生这种情况。

DataDirectory 仅供您的应用私人使用。如果用户需要这些数据,您应该将其复制到不会被删除的用户可写位置,例如 Environment.SpecialFolder.ApplicationData

在this answer进一步解释。

【讨论】:

以上是关于从 SQL Server CE 检索记录 [这个星球上有人可以解决这个问题吗??]的主要内容,如果未能解决你的问题,请参考以下文章

无法从 SQL Server CE 中删除记录

如何检查 SQL Server CE 数据库的索引?

Windows Phone SQL Server CE - 检索基础数据库架构以进行升级

检索 ODBC 表并插入 SQL Server CE 数据库

从Excel vba中的SQL Server数据中检索/创建记录集

批量从 SQL Server 检索数据