2

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

连接字符串

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

TSM_DB.sdf特性:

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

数据集属性:

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

我的问题:

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

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

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

我该如何解决这个问题?

编辑 :

示例选择代码(工作:当连接字符串路径为绝对时)

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
4

1 回答 1

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

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

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

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

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

这个答案的进一步解释。

于 2013-07-28T20:45:34.320 回答