在我的 Windows 窗体应用程序中遇到 Sqlcompact 数据库问题
Posted
技术标签:
【中文标题】在我的 Windows 窗体应用程序中遇到 Sqlcompact 数据库问题【英文标题】:Having trouble with Sqlcompact Database in my Windows Form Application 【发布时间】:2011-09-10 05:20:38 【问题描述】:我已经搜索了很多关于我的问题但没有解决方案,所以我在这里发帖寻求专家的建议。
我正在制作一个 Windows 窗体应用程序,并使用 Sql 紧凑型数据库。
我的问题:
当我使用代码(运行时)在数据库中插入记录时,它们被插入、删除、更新,我可以在我的应用程序中看到它们被更新、插入、删除,但是当我关闭应用程序并重新启动几次时他们被改变了,一百万次:)。否则我再次看到空白数据库,或者如果我直接从解决方案资源管理器 Visual Studio 2010 将值放入数据库中,它们将永远留在那里。我正在使用简单的更新、插入、删除语句,但不确定为什么当我关闭应用程序时对数据库所做的更改会消失。
首先这是为了所有人:
Dim con As New SqlCeConnection
Dim command As New SqlCeCommand
connectionString = "Data Source=SqlCompactDatabase/RestaurantDatabase.sdf"
con.ConnectionString = connectionString
command.Connection = con
con.Open()
我的插入代码:
command.CommandText = "Insert into Inventory(itemcode,itemmin,itemmax,itemdesc) Values('" + itmcod + "','" + min + "','" + max + "','" + desc + "')"
command.ExecuteScalar()
我的更新代码:
command.CommandText = "update Inventory set itemMin='" + min + "',itemMax='" + max + "',instock='" + stock + "',itemDesc='" + desc + "' where itemcode='" + TextBox1.Text + "'"
command.ExecuteScalar()
我的删除代码:
command.CommandText = "delete from inventory where itemcode='" + TextBox1.Text + "'"
command.ExecuteScalar()
我正确打开关闭连接没有错误,有一些我无法弄清楚:)
【问题讨论】:
some thing not related
' - 你为什么将 CE 数据库用于桌面应用程序(很想知道)
你可以说必须给某人,所以对方只知道如何运行,如果我使用其他人,他必须更改连接字符串等。
我有点弄清楚问题所在,每当我构建我的解决方案时,新数据都会被删除,否则无论我运行多少次它都会保留.. 但为什么会这样呢?谢谢
您的 sql 代码容易受到注入攻击。不要使用字符串连接来替换这样的参数值。
【参考方案1】:
如果您在 Visual Studio 中将 SQLCE 数据库添加到您的项目中,请查看其属性(在解决方案资源管理器中选择文件并查看属性面板)。通常,数据库文件的 Build Action 设置为“Content”,Copy To Output 选项设置为“Copy Always”。这意味着,每次构建解决方案时,您的 Visual Studio 项目中的数据库(很可能是空的)都会重新复制到构建文件夹($projectname$\bin\Debug 或 \Release)并用数据覆盖现有数据库在运行时添加。
要解决这个问题,只需将 Copy To Output 设置为“If newer”,只要您的设计数据库文件发生更改,它就会覆盖您的数据。
【讨论】:
谢谢。我有点想通了,但不知道原因:),请记住这一点。以上是关于在我的 Windows 窗体应用程序中遇到 Sqlcompact 数据库问题的主要内容,如果未能解决你的问题,请参考以下文章
在我的 .NET Windows 窗体上实现从 Chrome 拖放
C#。当我尝试检查用户是不是存在于我的 SQL 数据库中时,我的 Windows 窗体应用程序崩溃