自从我上一篇关于通过复选框进行循环保存的帖子以来已经有一段时间了。
所以我确实设法在将输入保存到表之前检查了输入,但是即使不重复一个,它也无法保存任何数据。
想要创建一个函数来检查表中是否已经存在每个复选框列表,但是我无法对其进行管理,因为它需要此脚本中的值,因此我跳过了它。
Using conn2 As New SqlConnection()
conn2.ConnectionString = ConfigurationManager _
.ConnectionStrings("BackboneConnectionString").ConnectionString()
Using cmd As New SqlCommand
cmd.CommandText = "Insert into EL_MstFunctionalNilai values(@IDFunc, @nik, @IDFuncParent, @IDFuncChild, @IDFuncMtr, '', '', '0')"
cmd.Connection = conn2
conn2.Open()
For Each item As ListItem In CheckBoxList2.Items
If item.Selected Then
'cmd.Parameters.Clear()
Dim urutan As Int32 = GetNumberFunctional()
Dim str As String = item.Value.ToString
Dim strArr() As String = str.Split("_")
Dim IDFunctionalParent1 As String = strArr(0)
Dim IDFunctionalChild1 As String = strArr(1)
Dim IDFunctionalMtr1 As String = strArr(2)
cmd.CommandText = "select count(*)as numrows from el_mstFunctionalnilai where nik = @nik and idfuncmtr = @IDFuncMtr"
cmd.Parameters.AddWithValue("@nik", txtnik.Text)
cmd.Parameters.AddWithValue("@IDFuncMtr", IDFunctionalMtr1)
queryresult = cmd.ExecuteScalar()
If queryresult = 0 Then
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@IDFunc", urutan)
cmd.Parameters.AddWithValue("@nik", txtnik.Text)
cmd.Parameters.AddWithValue("@IDFuncMtr", IDFunctionalMtr1) 'mtr
cmd.Parameters.AddWithValue("@IDFuncParent", IDFunctionalParent1) 'parent
cmd.Parameters.AddWithValue("@IDFuncChild", IDFunctionalChild1) 'child
cmd.ExecuteNonQuery()
'Label1.Text = queryresult --> already check if queryresult has value
End If
End If
Next
conn2.Close()
End Using
End Using
当它没有执行错误时,所以我无法弄清楚我缺少了什么。那么我该如何解决呢?
谢谢。
答案 0 :(得分:0)
el_mstFunctionalnilai
EL_MstFunctionalNilai
是哪个?请注意大写。
我猜到了所有SqlDbType,请检查您的数据库以获取实际的类型。
代码跟随您的模式,并有2次命中数据库。
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim queryResult As Integer
'Pass the connection string directly to the constructor of the connection
Using conn2 As New SqlConnection(ConfigurationManager.ConnectionStrings("BackboneConnectionString").ConnectionString())
'Pass the command text and the connection directly to the command constructor
'You do not need as alias for Count
Using cmd As New SqlCommand("select count(*) from EL_MstFunctionalNilai where nik = @nik and idfuncmtr = @IDFuncMtr", conn2)
conn2.Open()
'This value does not appear to change in the loop so I moved it outside the loop
Dim urutan As Int32 = GetNumberFunctional()
'Add the parameters outside of the loop and only change the value inside the loop
'The value of the text box can't change inside the loop so it can be assigned outside the loop
cmd.Parameters.Add("@nick", SqlDbType.Int).Value = CInt(txtnik.Text)
cmd.Parameters.Add("@IDFuncMtr", SqlDbType.VarChar)
Using cmd2 As New SqlCommand("Insert into EL_MstFunctionalNilai values(@IDFunc, @nik, @IDFuncParent, @IDFuncChild, @IDFuncMtr, '', '', '0')", conn2)
cmd2.Parameters.Add("@IDFunc", SqlDbType.Int).Value = urutan
cmd2.Parameters.Add("@nik", SqlDbType.Int).Value = CInt(txtnik.Text)
cmd2.Parameters.Add("@IDFuncMtr", SqlDbType.VarChar) 'mtr
cmd2.Parameters.Add("@IDFuncParent", SqlDbType.VarChar) 'parent
cmd2.Parameters.Add("@IDFuncChild", SqlDbType.VarChar) 'child
For Each item As ListItem In CheckBoxList2.Items
If item.Selected Then
Dim str As String = item.Value.ToString
Dim strArr() As String = str.Split("_"c)
Dim IDFunctionalParent1 As String = strArr(0)
Dim IDFunctionalChild1 As String = strArr(1)
Dim IDFunctionalMtr1 As String = strArr(2)
cmd.Parameters("@IDFuncMtr").Value = IDFunctionalMtr1
queryResult = CInt(cmd.ExecuteScalar())
If queryResult = 0 Then
cmd2.Parameters("@IDFuncMtr").Value = IDFunctionalMtr1 'mtr
cmd2.Parameters("@IDFuncParent").Value = IDFunctionalParent1 'parent
cmd2.Parameters("@IDFuncChild").Value = IDFunctionalChild1 'child
cmd.ExecuteNonQuery()
End If
End If
Next
End Using
End Using
End Using
End Sub
我认为使用一个查询既可以检查记录是否存在,也可以在不存在的情况下插入记录,会更容易。
Protected Sub Method2()
Dim urutan As Int32 = GetNumberFunctional()
Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings("BackboneConnectionString").ConnectionString())
Using cmd As New SqlCommand("If Exists (Select 1 From EL_MstFunctionalNilai where nik = @nik and idfuncmtr = @IDFuncMtr) Select 0 Else Select 1 Insert into EL_MstFunctionalNilai values(@IDFunc, @nik, @IDFuncParent, @IDFuncChild, @IDFuncMtr, '', '', '0');", cn)
cmd.Parameters.Add("@nik", SqlDbType.Int).Value = CInt(txtnik.Text)
cmd.Parameters.Add("@IDFuncMtr", SqlDbType.VarChar)
cmd.Parameters.Add("@IDFunc", SqlDbType.VarChar).Value = urutan
cmd.Parameters.Add("@IDFuncParent", SqlDbType.VarChar)
cmd.Parameters.Add("@IDFuncChild", SqlDbType.VarChar)
cn.Open()
For Each item As ListItem In CheckBoxList2.Items
If item.Selected Then
Dim strArr() As String = item.Value.ToString.Split("_"c)
cmd.Parameters("@IDFuncMtr").Value = strArr(2)
cmd.Parameters("@IDFuncParent").Value = strArr(0)
cmd.Parameters("@IDFuncChild").Value = strArr(1)
cmd.ExecuteScalar()
End If
Next
End Using
End Using
End Sub