将新行插入 SQL SERVER CE 3.5 DB 不起作用但不显示任何错误
Posted
技术标签:
【中文标题】将新行插入 SQL SERVER CE 3.5 DB 不起作用但不显示任何错误【英文标题】:Insert a new row into a SQL SERVER CE 3.5 DB not working but doesn't show any error 【发布时间】:2014-06-01 07:48:25 【问题描述】:我正在尝试使用 Visual Basic 2010 进行简单的输入/输出注册。
我创建了一个 SQL server 3.5 CE 数据库,并在其中创建了一个具有这种结构的表:
有Id
有礼Identity = true
我在一个模块中也得到了这个
Dim Var_NombreDB As String = "OlgaDatabase.sdf"
Dim Var_ProveedorDB As String = "Microsoft.SQLSERVER.CE.OLEDB.3.5"
Public Conexion_DB As New OleDb.OleDbConnection("Provider=" & Var_ProveedorDB & ";Data Source=" & Var_NombreDB & ";")
Public SQL_string_conexion As String = ""
Public cmd_Command As New OleDb.OleDbCommand
Public Dr_DataReader As OleDb.OleDbDataReader
我正在正确打开数据库连接,并且可以毫无问题地看到 DataGridView
中的寄存器,但是当我尝试插入新寄存器时不起作用,我得到了 textBoxes (txt_)数据和填充后生成的CommandText
查询是
INSERT INTO MOVIMIENTOS (Tipo, SubTipo, Descripcion, Monto, Saldo, Fecha)
VALUES ('1', '2', '3', 4, 24, GETDATE())
当我在查询语法检查器(在服务器资源管理器中)中尝试时,查询正常,如果我运行它,则会在表中添加一个包含预期数据的新行。
但是当我尝试在运行时添加新行时,即使它向我显示“ALL OK”MsgBox,我的表中也没有添加任何寄存器,这是我的插入按钮内的代码
cmd_Command.CommandType = CommandType.Text
cmd_Command.Connection = Conexion_DB
SQL_string_conexion = "INSERT INTO MOVIMIENTOS (Tipo, SubTipo, Descripcion, Monto, Saldo, Fecha) "
SQL_string_conexion += "VALUES ('" _
& txt_Tipo.Text & "', '" _
& txt_Subtipo.Text & "', '" _
& txt_Descripcion.Text & "', " _
& txt_Monto.Text & ", " _
& txt_Monto.Text + 20 & ", " _
& "GETDATE()" _
& ")"
cmd_Command.CommandText = SQL_string_conexion
Try
cmd_Command.ExecuteNonQuery()
MsgBox("All OK")
Catch ex As Exception
MsgBox(ex.ToString)
End Try
知道我做错了什么吗?我认为这与Id
列有关,但我不确定。
问候
【问题讨论】:
你为什么使用OleDbConnection
等?我建议使用正确的原生 SqlCeConnection
和 SqlCeCommand
只是因为我第一次使用 SQL Server,修改了用于 Access 数据库的代码。既然您指出了这一点,我尝试将每个 OleDb.OleDbConnection
更改为 SqlServerCe.SqlCeConnection
等等,但现在我什至无法读取数据库。由于Public Conexion_DB As New SqlServerCe.SqlCeConnection("Provider=" & Var_ProveedorDB & ";Data Source=" & Var_NombreDB & ";")
,我总是收到Dim adp As New SqlServerCe.SqlCeDataAdapter(SQLstr, Conexion_DB)
的System.TypeInitializationException was unhandled HResult=-2146233036
错误
好的,我删除了“Provider”选项并将连接保留为Public Conexion_DB As New SqlServerCe.SqlCeConnection("Data Source=" & Var_NombreDB & ";")
,现在它运行良好,甚至显示(在运行时)我添加的寄存器,但是当我回来时设计/编码数据库没有新的寄存器。
【参考方案1】:
在您的 bin/debug 文件夹中查找包含数据的数据库文件的副本。 (这里有很多答案的重复)
解决方法是不在项目中包含 sdf 文件,或指定 .sdf 文件的完整路径。
【讨论】:
如果我使用该解决方法,我该如何将该数据库添加到我的项目安装程序中?谢谢 取决于安装程序,但是数据库不应该部署在与您的.exe相同的文件夹中,我在这里有一些想法:erikej.blogspot.dk/2013/10/… 好的,据我了解,每次调试时,原始数据库都会复制到 bin/debug 目录中。不?这只是控制的事情不是吗?我想当我最后安装安装程序时,它会消失,谢谢你的链接!我将尝试弄清楚如何使用该信息管理数据库。这个想法是安装程序在每次安装中放置一个预先格式化的数据库,我只是想做一个简单的输入/输出日志以上是关于将新行插入 SQL SERVER CE 3.5 DB 不起作用但不显示任何错误的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0