0

我正在尝试使用 vb.net 数据适配器、数据表和数据行功能在 sql 数据库中插入一条记录。我使用以下代码,但它给了我一个错误:

Object reference not set to an instance of an object

Imports System.Data.SqlClient
Public Class Form1  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim cn As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=drpractice;Integrated Security=True")
        Dim da As New SqlDataAdapter
        Dim ds As New DataSet

        Try
            cn.Open()
            da.SelectCommand = New SqlCommand("SELECT * FROM [emp_tbl]", cn)
            da.Fill(ds) 
            Dim dt As New DataTable
            dt = ds.Tables("emp_tbl")

            'Error in this line(Object reference not set to an  instance of an object)'
            Dim dr As DataRow = dt.NewRow() 

            dr.Item("emp_id") = TextBox1.Text.Trim
            dr.Item("emp_name") = TextBox2.Text.Trim
            dr.Item("salary") = TextBox3.Text.Trim
            dr.Item("age") = TextBox4.Text.Trim
            dr.Item("emp_group") = TextBox5.Text.Trim
            dt.Rows.Add(dr)
            da.Update(ds)
            MsgBox("Record Successfully Inserted")
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class 
4

4 回答 4

0

您所做的一切都很好,但更改了以下行:

da.Update(ds)

如下:

Dim ESCBuilder As SqlCommandBuilder = New SqlCommandBuilder(da)
    ESCBuilder.GetUpdateCommand()
    da.UpdateCommand = ESCBuilder.GetUpdateCommand()
    da.Update(ds)
于 2013-12-11T14:11:17.653 回答
0

看看这个:Dim dr As DataRow = new dt.NewRow()

于 2013-05-24T14:33:37.387 回答
0
Imports System.Data.SqlClient
Public Class Form4
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    Dim str As String
    Dim count As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        con = New SqlConnection("server=SHREE-PC;database=Hospital;INTEGRATED SECURITY=SSPI;")
        con.Open()
      ‘  cmd = New SqlCommand("select * from Doctor", con)
        str = "insert into Doctor values('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "' )"
        cmd = New SqlCommand(str, con)
        count = cmd.ExecuteNonQuery()
        MessageBox.Show(count & " Record inserted")

       con.close()
    End Sub

Imports System.Data.SqlClient
Public Class Form4
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    Dim str As String
    Dim count As Integer
   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     con = New SqlConnection("server=SHREE-PC;database=Hospital;INTEGRATED SECURITY=SSPI;")
        con.Open()
        cmd = New SqlCommand("select * from Patient", con)
        cmd = New SqlCommand("Delete from Patient where Name ='" & TextBox1.Text & "'", con)
        cmd = New SqlCommand("Delete from Patient where Address='" & TextBox2.Text & "'", con)
        cmd = New SqlCommand("Delete from Patient where Dieses='" & TextBox3.Text & "'", con)
        cmd = New SqlCommand("Delete from Patient where Patient_no=" & TextBox4.Text & "", con)
‘you can take any row in your program
        count = cmd.ExecuteNonQuery()
        MessageBox.Show("Record Deleted")
    End Sub
于 2014-04-12T04:14:11.347 回答
0

根据此处和其他地方的反馈,以下代码对我有用:

    TestDataSet.GetChanges()
    testTableAdapter.Fill(TestDataSet.log_test)
    log_testDataGridView.Refresh()

我需要做的是,创建一个新行,然后获取主键的下一个值(VARCHAR,NOT INT,因为修订版在 PK 后附加了一个“R”......不是我的规则......规则该公司的)。

我想让刷新接近 PK 的获得,这是我在为新数据行分配值之后最后一次获得的,因此它将获得最新的 Max +1。

因此,我将上面的代码放在查找 PK 之前,以及在为数据行分配值之后,而不是 PK。上面的代码导致数据行空白。因此,我将上述代码放在创建新 DataRow 之前。

对于我的代码,这导致代码从 SQL 表中获取最新的数据,然后添加新的数据行,最后确定最后的 PK。因为用于填充数据行的数据不在我的表单中,并且没有计算,所以代码运行速度足够快,可以满足我的需要。我怀疑,如果与我的数据库的连接速度很慢,和/或运行同一进程的人数很多,我会遇到错误,例如重复 PK。

我对此的回答是将数据行字段值分配给变量,运行刷新,然后将变量分配给字段并立即保存。

也许另一种方法是获取新的 PK,然后保存一个空记录,然后填充记录,除了我表中的足够字段是必需的,所以我不妨先尝试创建空白记录。

于 2014-02-26T19:58:09.517 回答