【问题标题】:ignore null data insert into sql from datagrid view忽略从datagridview插入sql的空数据
【发布时间】:2016-12-01 00:04:02
【问题描述】:

我从数据 gridview 向 sql server 插入数据我有一些空数据输入的问题,我怎样才能使空数据不进入我的表格中,我有一些数据不进入我的表的问题。look image pls

Using con As New SqlConnection(constring)
    Using cmd As New SqlCommand("INSERT INTO kkpsurabaya VALUES(@Emp_No, @AC_No, @No, @Name, @Auto_Assign, @Date, @Timetable, @on_duty, @off_duty, @clock_in, @clock_out, @Normal, @Realtime, @Late, @Early, @Absent, @OT_Time, @Work_time, @Departmen)", con)
        cmd.Parameters.AddWithValue("@Emp_No", row.Cells("Emp No#").Value)
        cmd.Parameters.AddWithValue("@AC_No", row.Cells("AC-No#").Value)
        cmd.Parameters.AddWithValue("@No", row.Cells("No#").Value)
        cmd.Parameters.AddWithValue("@Name", row.Cells("Name").Value)
        cmd.Parameters.AddWithValue("@Auto_Assign", row.Cells("Auto-Assign").Value)
        cmd.Parameters.AddWithValue("@Date", row.Cells("Date").Value)
        cmd.Parameters.AddWithValue("@Timetable", row.Cells("Timetable").Value)
        cmd.Parameters.AddWithValue("@on_duty", row.Cells("on duty").Value)
        cmd.Parameters.AddWithValue("@off_duty", row.Cells("off duty").Value)
        cmd.Parameters.AddWithValue("@clock_in", row.Cells("clock in").Value)
        cmd.Parameters.AddWithValue("@clock_out", row.Cells("clock out").Value)
        cmd.Parameters.AddWithValue("@Normal", row.Cells("Normal").Value)
        cmd.Parameters.AddWithValue("@Realtime", row.Cells("Real time").Value)
        cmd.Parameters.AddWithValue("@Late", row.Cells("Late").Value)
        cmd.Parameters.AddWithValue("@Early", row.Cells("Early").Value)
        cmd.Parameters.AddWithValue("@Absent", row.Cells("Absent").Value)
        cmd.Parameters.AddWithValue("@OT_Time", row.Cells("OT Time").Value)
        cmd.Parameters.AddWithValue("@Work_time", row.Cells("Work time").Value)
        cmd.Parameters.AddWithValue("@Departmen", row.Cells("Department").Value)
        con.Open()
        Try
            cmd.ExecuteNonQuery()

【问题讨论】:

    标签: sql-server vb.net datagrid


    【解决方案1】:

    我强烈建议以不同的方式执行此操作。与其循环遍历网格并手动插入每一行,不如创建一个 DataTable 并将其绑定到网格。然后,您可以对数据适配器的Update 方法进行一次调用以保存该批次。您可以使用命令生成器生成数据适配器的InsertCommand,也可以自己生成。无论哪种方式,您都不必担心 NULL,因为它会为您处理。下面是一个使用命令生成器的示例:

    Private adapter As SqlDataAdapter
    Private builder As SqlCommandBuilder
    Private table As DataTable
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        adapter = New SqlDataAdapter("SELECT * FROM MyTable", "connection string here")
        builder = New SqlCommandBuilder(adapter)
        table = New DataTable
    
        adapter.FillSchema(table, SchemaType.Source)
    
        Me.BindingSource1.DataSource = table
        Me.DataGridView1.DataSource = Me.BindingSource1
    End Sub
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.BindingSource1.EndEdit()
    
        adapter.Update(table)
    End Sub
    

    【讨论】:

    • 没有什么特别复杂的。如果您希望我提供更具体的解释,请对您不理解的内容提供更具体的解释。
    • @RiskyWahyuN 我们只能给你解释,我们无法为你理解​​。这有时需要一些老式的研究。
    • 我不知道我改变了我的笔记本电脑并在电脑上做这又没有错误。
    【解决方案2】:

    如果 row.Cells("Emp No#").Value 为空,那么 AddWithValue 将忽略此参数,而不是放入 DBNull.Value。
    我认为这是一个巨大的错误,但我似乎是唯一一个。
    无论如何,您可以像这样修复它:

      cmd.Parameters.AddWithValue("@Emp_No", row.Cells("Emp No#").Value ?? (object)DBNull.Value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 2012-11-03
      • 1970-01-01
      • 2012-06-04
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多