2017-05-24 57 views
1

我有一个Visual Basic窗体,其输入字段将生成单个零件的序列号并将其写回到SQL数据库。如何根据vb表单中的数量字段生成多个连续数据?SQL插入基于VB中的值的多个记录表单

SQL DB:

create table serialnumbers (
    serial int IDENTITY(10000,1), 
    workorder varchar(50), 
    partnumber varchar(50), 
    employeeid int, 
    [day] varchar(50) 
) 

VB:

Public Class Form1 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Form2.Show() 
End Sub 

Public Sub ClearTextBoxes(frm As Form) 

    For Each Control In frm.Controls 
     If TypeOf Control Is TextBox Then 
      Control.Text = ""  'Clear all text' 
     End If 
    Next Control 

End Sub 


Private Sub BTNSUBMIT_Click(sender As Object, e As EventArgs) Handles BTNSUBMIT.Click 
    datetime.Text = Date.Now.ToString 
    If workorder.Text = "" Or partnumber.Text = "" Or employeeid.Text = "" Or quantity.Text = "" Or datetime.Text = "" Then 
     MsgBox("Please Enter All Required Fields") 
    Else 

     Try 
      cmd.CommandType = System.Data.CommandType.Text 
      cmd.CommandText = "Insert Into famem1 Values ('" & workorder.Text & "', '" & partnumber.Text & "', '" & employeeid.Text & "', '" & datetime.Text & "') " 

      cmd.Connection = con 
      con.Open() 
      cmd.ExecuteNonQuery() 
      MsgBox("Successfully Added", MsgBoxStyle.Information, "add") 

     Catch ex As Exception 
      MessageBox.Show(ex.Message) 

     End Try 
     Call ClearTextBoxes(Me) 
    End If 
End Sub 
End Class 
+4

在你做任何事情之前,你需要阅读,理解并开始使用参数化查询,然后才能访问bobby表。 http://bobby-tables.com/您还应该将连接和命令对象包装在USING语句中,以便您可以将连接释放回连接池。 –

+0

至于手头的问题,我不完全确定你想要什么。您是否想根据用户输入创建一定数量的相同行? –

+0

是的。希望用户可以在表单上输入数量,并将该行数写入SQL。 – dustinw

回答

2

把你的插入过程中的循环:

For a = 1 to 20 'or whatever qty the user inputs 

    Using con As New OleDb.OleDbConnection 

      con.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;" & _ 
            "Data Source = " & auth_path 

      Dim sqlcommand As New OleDb.OleDbCommand 

      'set work order number 
      'set part number 
      'set employee id 

      'generate serial here 

      con.Open() 

      With sqlcommand 
       .CommandText = "Insert Into ..... " 
       .Connection = con 
       .ExecuteNonQuery() 

      End With 

    End Using 



Next 

或者你可以如你的数据库添加几个字段serial_1,serial_2等。

然后根据数量你可以用IF Then语句更新这些字段。

If Cint(txt_qty.text) >= 2 Then 

.... ' update the record with serial_2 

End If 

If Cint(txt_qty.text) >= 3 Then 

.... ' update the record with serial_3 

End If 
+0

谢谢,但第一个场景仍然只写入一条记录到SQL。由于串行需要自动生成,所以第二种情况将不起作用。 – dustinw

+0

我更新了我的答案,以更好地展示我的意思,虽然它使用的是稍有不同的数据库提供程序,但您应该了解我想告诉您的内容 –

+0

请原谅我的无知。代码确实有效。感谢您的时间。 – dustinw