【问题标题】:error :ExecuteNonQuery: CommandText property has not been initialized错误:ExecuteNonQuery:CommandText 属性尚未初始化
【发布时间】:2012-02-23 11:18:03
【问题描述】:

此代码在按钮单击中,我使用溢出获取每个数据 但我在“cmd.CommandType = CommandType.Text”遇到错误

 Dim conn As New SqlConnection(GetConnectionString())
            Dim sb As New StringBuilder(String.Empty)

            Dim splitItems As String() = Nothing
            For Each item As String In sc

                Const sqlStatement As String = "INSERT INTO Date (dateID,date) VALUES"
                If item.Contains(",") Then
                    splitItems = item.Split(",".ToCharArray())
                    sb.AppendFormat("{0}('{1}'); ", sqlStatement, splitItems(0))

                End If
            Next

            Try
                conn.Open()
                Dim cmd As New SqlCommand(sb.ToString(), conn)

                cmd.CommandType = CommandType.Text
                cmd.ExecuteNonQuery()


                Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "Script", "alert('Records Successfuly Saved!');", True)
            Catch ex As System.Data.SqlClient.SqlException
                Dim msg As String = "Insert Error:"
                msg += ex.Message

                Throw New Exception(msg)
            Finally
                conn.Close()
            End Try

相同的代码,下面的工作 Dim conn 作为新的 SqlConnection(GetConnectionString()) Dim sb As New StringBuilder(String.Empty)

    Dim splitItems As String() = Nothing
    For Each item As String In sc

        Const sqlStatement As String = "INSERT INTO GuestList (groupID,guest,contact,eEmail,relationship,info,customerID) VALUES"
        If item.Contains(",") Then
            splitItems = item.Split(",".ToCharArray())
            sb.AppendFormat("{0}('{1}','{2}','{3}','{4}','{5}','{6}','{7}'); ", sqlStatement, splitItems(0), splitItems(1), splitItems(2), splitItems(3), splitItems(4), splitItems(5), Session("customerID"))

        End If
    Next

    Try
        conn.Open()
        Dim cmd As New SqlCommand(sb.ToString(), conn)
        cmd.CommandType = CommandType.Text
        cmd.ExecuteNonQuery()


        Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "Script", "alert('Records Successfuly Saved!');", True)
    Catch ex As System.Data.SqlClient.SqlException
        Dim msg As String = "Insert Error:"
        msg += ex.Message

        Throw New Exception(msg)
    Finally
        conn.Close()
    End Try

【问题讨论】:

  • 您的Catch 块非常错误。要么摆脱它,要么抛出带有详细消息的异常并将原始异常作为InnerException
  • 你有一个 SQL 注入漏洞。
  • Throw New InvalidOperationException("Some message with " + someDetail, ex)
  • 你指定这个 (dateID,date) 但你只给出一个值

标签: vb.net insert executenonquery


【解决方案1】:

您从不设置 CommandText 属性。
您根本不需要设置 CommandType

【讨论】:

    【解决方案2】:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 句柄

    MyBase.Load

    将 dt 调暗为新数据表

       constr.Open()
        cmd = New OleDbCommand("SELECT *  FROM tblGender )
        da = New OleDbDataAdapter(cmd)
        da.Fill(dt)
        constr.Close()
        With ComboBox1
            .DataSource = dt
            .DisplayMember = "Gender"
        End With
    
    
        dim dt1 as new datatable
    
       constr.Open()
        cmd = New OleDbCommand("SELECT *  FROM tblStatus )
        da = New OleDbDataAdapter(cmd)
        da.Fill(dt)
        constr.Close()
        With ComboBox2
            .DataSource = dt1
            .DisplayMember = "Status"
        End With
    
    
        dim dt2 as new datatable
       constr.Open()
        cmd = New OleDbCommand("SELECT *  FROM tblDepartment )
        da = New OleDbDataAdapter(cmd)
        da.Fill(dt)
        constr.Close()
        With ComboBox3
            .DataSource = dt2
            .DisplayMember = "Department"
        End With
    
        End Sub
    

    【讨论】:

      【解决方案3】:

      看到这个

      Dim conn As New SqlConnection(GetConnectionString())
      Dim sb As New StringBuilder(String.Empty)
      
      Dim splitItems As String() = Nothing
      For Each item As String In sc
      
          'Const sqlStatement As String = "INSERT INTO Date (dateID,date) VALUES"
          'If item.Contains(",") Then
          '    splitItems = item.Split(",".ToCharArray())
          '    sb.AppendFormat("{0}('{1}'); ", sqlStatement, splitItems(0))
      
          'End If
      
          Const sqlStatement As String = "INSERT INTO Date (dateID,date) VALUES"
          If item.Contains(",") Then
              splitItems = item.Split(",".ToCharArray())
              sb.AppendFormat("{0}({1},'{2}'); ", sqlStatement, splitItems(0), splitItems(1))
      
          End If
      
      Next
      
      Try
          conn.Open()
          Dim cmd As New SqlCommand(sb.ToString(), conn)
      
          cmd.CommandType = CommandType.Text
          cmd.ExecuteNonQuery()
      
      
          Page.ClientScript.RegisterClientScriptBlock(GetType(Page), "Script", "alert('Records Successfuly Saved!');", True)
      Catch ex As System.Data.SqlClient.SqlException
          Dim msg As String = "Insert Error:"
          msg += ex.Message
      
          Throw New Exception(msg)
      Finally
          conn.Close()
      End Try
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 2011-08-10
        • 2013-08-03
        相关资源
        最近更新 更多