更新*。使用VB.NET的SDF数据库文件

时间:2016-08-09 03:08:15

标签: vb.net sql-server-ce

我在Visual Studio和SQL Server Compact Edition 3.5中创建了一个桌面应用程序。我可以无误地插入记录。我的问题是在没有错误的情况下运行更新后,数据库之后没有任何变化。

这是我的更新代码:

Dim Cmd As SqlCeCommand
        Try
            If Con.State = ConnectionState.Closed Then Con.Open()
            Cmd = New SqlCeCommand("Update [Meds] SET [Brand] =@Brand,[GenericName]=@GenericName,[Dosage]=@Dosage,[Form]=@Form,[StockDose]=@StockDose,[Supplier]=@Supplier,[Manufacturer]=@Manufacturer,[Quantity]=@Quantity,[PerUnit1]=@PerUnit1,[ExpiryDate]=@ExpiryDate,[SellingPrice]=@SellingPrice WHERE [PerUnit2] =@PerUnit2", Con)
            Cmd.Parameters.Add(New SqlCeParameter("@Brand", SqlDbType.NVarChar)).Value = txtBrand.Text
            Cmd.Parameters.Add(New SqlCeParameter("@GenericName", SqlDbType.NVarChar)).Value = txtGenericName.Text
            Cmd.Parameters.Add(New SqlCeParameter("@Dosage", SqlDbType.NVarChar)).Value = txtDosage.Text
            Cmd.Parameters.Add(New SqlCeParameter("@Form", SqlDbType.NVarChar)).Value = cbForm.SelectedText
            Cmd.Parameters.Add(New SqlCeParameter("@StockDose", SqlDbType.NVarChar)).Value = txtStockDose.Text
            Cmd.Parameters.Add(New SqlCeParameter("@Supplier", SqlDbType.NVarChar)).Value = txtSupplier.Text
            Cmd.Parameters.Add(New SqlCeParameter("@Manufacturer", SqlDbType.NVarChar)).Value = txtManufacturer.Text
            Cmd.Parameters.Add(New SqlCeParameter("@Quantity", SqlDbType.NVarChar)).Value = txtQty.Text
            Cmd.Parameters.Add(New SqlCeParameter("@PerUnit1", SqlDbType.NVarChar)).Value = cbPerUnit1M.SelectedText
            Cmd.Parameters.Add(New SqlCeParameter("@ExpiryDate", SqlDbType.DateTime)).Value = dtpExpiry.Value
            Cmd.Parameters.Add(New SqlCeParameter("@SellingPrice", SqlDbType.NVarChar)).Value = txtPrice.Text
            Cmd.Parameters.Add(New SqlCeParameter("@PerUnit2", SqlDbType.NVarChar)).Value = cbPerUnit2M.SelectedText
            Cmd.ExecuteNonQuery()
            MsgBox("Items already UPDATED!")
            List.Show()
            Me.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        Con.Close()

3 个答案:

答案 0 :(得分:0)

尝试添加:

Dim modified = Cmd.ExecuteNonQuery()
If modified = 0 Then Throw New Exception("Nothing was updated")

如果修改后的值= 0,那么您的WHERE子句出现问题,并且您没有匹配记录。

如果修改后的值<> 0然后更新查询运行并匹配的东西。因此,问题必须是您要更新的值,或者您要检查这些值。

答案 1 :(得分:0)

您可能正在检查错误的位置,在bin / debug文件夹中查找sdf文件的副本。最好的方法是在开发期间在连接字符串中使用完整路径(或在运行时构造连接字符串)

答案 2 :(得分:0)

感谢所有回答我问题的人。

问题出在我的 WHERE 子句声明中,我正在尝试修改不匹配的记录。

感谢FloatingKiwi。