2012-11-14 57 views
0

我有问题,数据库保存更改:Visual Basic .NET中的Access数据库添加记录

coon1.ConnectionString = _ 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _ 
    "magazyn.mdb" 
    sql = "INSERT INTO magazyn (ID_Towaru,Kod_Towaru,Nazwa_Towaru,Ilość_w_magazynie,ilość_minimalna,ALERT) VALUES ('" & jakiid & "','" & kodtowaru & "','" & nazwatowaru & "','" & iloscwmagazynie & "','" & iloscminimalna & "',0)" 


    Dim MyConnection As New OleDbConnection(conn) 
    Dim command1 As New OleDbCommand(sql, MyConnection) 

    command1.Connection.Open() 
    command1.ExecuteNonQuery() 
    MyConnection.Close() 

我尝试新的记录添加到表magazyn,但Access中打开数据库时,当时我没有看到任何新纪录与表中的magazyn相关。但ViewGrid显示我这个新的元素,直到我关闭并重新打开该程序。

有人知道问题出在哪里吗?

+0

也许VS替换的 “工作”每次在IDE中运行该程序时,将数据库的副本与原始数据库(空的)一起复制。 –

+0

是jakiid/ID_Towaru数字?如果是这样,请勿使用引号。它是一个自动编号吗?如果是这样,请不要插入它。在使用SQL之前,通常最好检查查询是否在MS Access中工作。用参数和保存的查询,或者至少是参数,你会更好。 – Fionnuala

+0

@Remou是ID_Towaru是一个自动编号。好吧,所以我尝试从查询编辑中删除这个ID_Towaru:我从查询中删除了ID_Towaru,但没有发生新的事件 –

回答

2

始终使用参数而不是字符串连接。应遵循此规则

sql = "INSERT INTO magazyn " + 
     "(Kod_Towaru,Nazwa_Towaru,Ilość_w_magazynie,ilość_minimalna,ALERT) " + 
     "VALUES (?, ?, ?, ?,0)" 
Using MyConnection As New OleDbConnection(conn) 
Using command1 As New OleDbCommand(sql, MyConnection) 
    command1.Connection.Open() 
    command1.Parameters.AddWithValue("@Kod", kodtowaru) 
    command1.Parameters.AddWithValue("@naz", nazwatowaru) 
    command1.Parameters.AddWithValue("@ilo", iloscwmagazynie) 
    command1.Parameters.AddWithValue("@mini", iloscminimalna) 
    command1.ExecuteNonQuery() 
End Using 
End Using 

这当然要求用作参数值的变量是正确的数据类型。

0

请在模块中插入以下代码。

进口System.Data.OleDb 模块模块1

Public OleCn As New OleDbConnection() 

Public Function StrConnection() As String 

    StrConnection = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Testing.Accdb;" 

    Return StrConnection 
End Function 

后该插入保存按钮下面的编码。

昏暗味精作为的DialogResult = MessageBox.Show( “是否要保存该记录?”, “响应”,MessageBoxButtons.YesNo,MessageBoxIcon.Question)

If (msg = vbYes) Then 

     If RequiredEntry() = True Then 
      Return 
     End If 

     Try 
      With OleCn 
       If .State <> ConnectionState.Open Then 
        .ConnectionString = StrConnection() 
        .Open() 
       End If 
      End With 
     Catch ex As Exception 
      MessageBox.Show(ex.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     End Try 

     Try 

      Dim sSQL As String = "insert into Vendor values(@VendorCode,@VendorName,@Address,@City,@LandPhone,@Mobile,@EmailID,@Balance)" 

      Dim cmd As OleDbCommand = New OleDbCommand(sSQL, OleCn) 

      'VendorCode 
      Dim VendorCode As OleDbParameter = New OleDbParameter("@VendorCode", OleDbType.VarChar, 10) 
      VendorCode.Value = txtVendorCode.Text.ToString() 
      cmd.Parameters.Add(VendorCode) 

      'VendorName 
      Dim VendorName As OleDbParameter = New OleDbParameter("@VendorName", OleDbType.VarChar, 25) 
      VendorName.Value = txtVendorName.Text.ToString() 
      cmd.Parameters.Add(VendorName) 

      'Address 
      Dim Address As OleDbParameter = New OleDbParameter("@Address", OleDbType.VarChar, 50) 
      Address.Value = txtAddress.Text.ToString() 
      cmd.Parameters.Add(Address) 

      'City 
      Dim City As OleDbParameter = New OleDbParameter("@City", OleDbType.VarChar, 25) 
      City.Value = txtCity.Text.ToString() 
      cmd.Parameters.Add(City) 

      'LandPhone 
      Dim LandPhone As OleDbParameter = New OleDbParameter("@LandPhone", OleDbType.VarChar, 50) 
      LandPhone.Value = txtLandPhone.Text.ToString() 
      cmd.Parameters.Add(LandPhone) 


      'Mobile 
      Dim Mobile As OleDbParameter = New OleDbParameter("@Mobile", OleDbType.VarChar, 15) 
      Mobile.Value = txtMobile.Text.ToString() 
      cmd.Parameters.Add(Mobile) 

      'EmailID 
      Dim EmailID As OleDbParameter = New OleDbParameter("@EmailID", OleDbType.VarWChar, 25) 
      EmailID.Value = txtEmailID.Text.ToString() 
      cmd.Parameters.Add(EmailID) 


      'Balance 
      Dim Balance As OleDbParameter = New OleDbParameter("@Balance", OleDbType.VarWChar, 10) 
      Balance.Value = txtBalance.Text.ToString() 
      cmd.Parameters.Add(Balance) 

      If cmd.ExecuteNonQuery() Then 

       OleCn.Close() 
       MessageBox.Show("New Record is Added Successfully.", "Record Saved") 
       Call clear() 

      Else 

       MsgBox("Record Addition Failed ", MsgBoxStyle.Critical, "Addition Failed") 

       Return 
      End If 

     Catch ex As Exception 
      MessageBox.Show(ex.Message.ToString(), "Data Error") 
      Exit Sub 
     End Try 
    End If 
相关问题