2016-08-09 4 views
0

У меня есть настольное приложение, созданное в Visual Studio и SQL Server Compact Edition 3.5. Я могу вставить запись без ошибок. Моя проблема заключается в том, что после запуска обновления без ошибок в базе данных нет изменений.Обновление *. Файл базы данных SDF с использованием VB.NET

Вот мой код обновления:

Dim Cmd As SqlCeCommand 
     Try 
      If Con.State = ConnectionState.Closed Then Con.Open() 
      Cmd = New SqlCeCommand("Update [Meds] SET [Brand] [email protected],[GenericName][email protected],[Dosage][email protected],[Form][email protected],[StockDose][email protected],[Supplier][email protected],[Manufacturer][email protected],[Quantity][email protected],[PerUnit1][email protected],[ExpiryDate][email protected],[SellingPrice][email protected] WHERE [PerUnit2] [email protected]", 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() 
+0

Пожалуйста, поделитесь своей строкой соединения – ErikEJ

+0

Dim Con Как OleDbConnection = Новый OleDbConnection ("Provider = Microsoft.ACE.OLEDB.12.0; источник данных = C: \ Users \ Adrian \ Documents \ Pharmacy.accdb;") – dran1979

+0

Это НЕ SQL Server Compact Edition, то есть Microsoft Access? !! – ErikEJ

ответ

0

Попробуйте добавить:

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

Если измененное значение = 0, то что-то не так с вашей ИНЕКЕ и вы не соответствующие записи.

Если измененное значение <> 0, то запрос обновления запускался и что-то сопоставлял. Таким образом, проблема должна быть со значениями, которые вы обновляете, или, тем не менее, вы проверяете эти значения.

+0

попробует это .. спасибо – dran1979

+0

Спасибо, мой UPDATE теперь работает, большое спасибо до следующего раза. sir – dran1979

+0

Нет проблем. Если это работает, вы можете пометить ответ как принятый. – FloatingKiwi

0

Возможно, вы обнаружили неправильное место, загляните в папку bin/debug для копии файла sdf. Лучший подход - использовать полный путь в вашей строке соединения во время разработки (или построить строку соединения во время выполнения)

+0

Привет, ErikEJ, я проверил путь, и он прав. Я использую тот же путь, где мой запрос INSERT работает. – dran1979

0

Спасибо всем, кто отвечает на мой вопрос.

проблема была внутри моего WHERE Оператор clause, я пытаюсь изменить запись, которая не соответствует.

Благодаря FloatingKiwi.