【问题标题】:SQL Server CE query having no effect?SQL Server CE 查询没有效果?
【发布时间】:2015-08-05 02:44:57
【问题描述】:

我正在尝试将行插入 SQL Server CE 数据库,它返回 1 行受到影响,据我所知,没有例外,查询中没有语法错误 - 但它没有效果,当我从数据库资源管理器中查看表格时。

如果我通过 VS 运行查询,一切正常。据我所知,没有连接问题......我在这里做错了什么?

这是代码,虽然它可能没有什么区别:

    Using conn As New SqlCeConnection(My.Settings.DietSafetyCheckerReportsConnectionString)
        conn.Open()

        Using cmd As SqlCeCommand = conn.CreateCommand()
            cmd.CommandText = "INSERT INTO Reports(PatientID, PreparedBy, PreparedFor, WeightInKilos, HeightInMeters, Age, PercentBodyFat, ElbowMeasurementInCentimeters, ReportDate, Gender) " &
                              "VALUES(@pid, @pby, @pfor, @weight, @height, @age, @bodyfat, @elbow, @rdate, @gender);"

            cmd.Parameters.Add("@pid", SqlDbType.NVarChar, 100).Value = Me.PatientID
            cmd.Parameters.Add("@pby", SqlDbType.NVarChar, 100).Value = Me.PreparedBy
            cmd.Parameters.Add("@pfor", SqlDbType.NVarChar, 100).Value = Me.PreparedFor
            cmd.Parameters.Add("@weight", SqlDbType.Float).Value = Me.WeightInKilos
            cmd.Parameters.Add("@height", SqlDbType.Float).Value = Me.HeightInMeters
            cmd.Parameters.Add("@age", SqlDbType.TinyInt).Value = Me.Age
            cmd.Parameters.Add("@bodyfat", SqlDbType.Float, 100).Value = Me.PercentBodyFat
            cmd.Parameters.Add("@elbow", SqlDbType.TinyInt, 100).Value = Me.ElbowMeasurementInCentimeters
            cmd.Parameters.Add("@rdate", SqlDbType.DateTime).Value = Me.ReportDate
            cmd.Parameters.Add("@gender", SqlDbType.TinyInt, 100).Value = Me.Gender

            If cmd.ExecuteNonQuery() <> 1 Then Throw New ApplicationException("Failed to insert row into databse.")
        End Using

        conn.Close()
    End Using

(顺便说一句,这也行不通:

    Using da As New SqlCeDataAdapter("SELECT * FROM Reports", conn)
            Dim ds As New DietSafetyCheckerReportsDataSet()
            Dim dt As DietSafetyCheckerReportsDataSet.ReportsDataTable
            da.Fill(ds)
            dt = DirectCast(ds.Tables("Reports"), DietSafetyCheckerReportsDataSet.ReportsDataTable)
            Dim dr As DietSafetyCheckerReportsDataSet.ReportsRow = dt.NewReportsRow()
            dr.Age = Me.Age
            dr.ElbowMeasurementInCentimeters = Me.ElbowMeasurementInCentimeters
            dr.Gender = Me.Gender
            dr.HeightInMeters = Me.HeightInMeters
            dr.PatientID = Me.PatientID
            dr.PercentBodyFat = Me.PercentBodyFat
            dr.PreparedBy = Me.PreparedBy
            dr.PreparedFor = Me.PreparedFor
            dr.ReportDate = Me.ReportDate
            dr.WeightInKilos = Me.WeightInKilos
            dt.Rows.Add(dr)
            da.Update(ds)
        End Using
)

【问题讨论】:

  • 非常感谢您对否决的原因发表评论。

标签: sql vb.net sql-server-ce


【解决方案1】:

查看您的 bin/debug 文件夹,您可能有更多相同数据库文件的副本

【讨论】:

  • 我尝试更改复制选项,但仍然无效,因此我创建了一个新的数据库连接并在向导完成之前按“取消”,然后手动添加所有内容。谢谢!
【解决方案2】:

我的建议是你关闭了服务器上的autocommit 模式(默认开启)或者连接设置,所以你需要手动提交你的事务。查看here 了解更多信息。

【讨论】:

  • 谢谢,有没有一种方法可以在不使用 SQL 代码的情况下进行设置?数据库范围的设置?
  • 我还收到了一个 SqlCeException,其中包含“无效的设置选项。[设置选项 = IMPLICIT_TRANSACTIONS ]”试图这样修复它。
  • 这只是一个猜测。无论如何,您似乎已经发现了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2013-04-09
  • 2017-07-03
  • 1970-01-01
相关资源
最近更新 更多