将新行插入 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等?我建议使用正确的原生 SqlCeConnectionSqlCeCommand 只是因为我第一次使用 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

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0

SQL Server CE 3.5 SP1 存储过程

Sql Server CE 3.5 和 .NET Compact Framework 2.0 SP2

Sql Server Ce 3.5 检查约束

如何阻止 SQL Server CE 3.5 更改跟踪表无限增长?