【问题标题】:Visual Basic, Copying Success but does not Insert data into SQL TABLEVisual Basic,复制成功但未将数据插入 SQL TABLE
【发布时间】:2018-02-18 06:15:02
【问题描述】:

我这里有一些问题。我需要帮助。

最近,我创建了一个名为 stock.mdf 的本地数据库,该应用程序将从托管 MySQL 数据库中获取所有数据到此本地 SQL Server 数据库中。

我正在使用sqlBulkCopy 插入所有数据。插入后我试图查看它。但是当我关闭我的应用程序时,我会返回检查表数据。它没有插入。这是为什么呢?

这是我的代码:

这里将从主机检索数据

    Dim connStr As String = "server=xxxx;user=xxx;database=xxx;password=xxxx;"
    Dim conn As New MySqlConnection(connStr)
    Dim cmd As New MySqlCommand
    Dim Adapter As New MySqlDataAdapter
    Dim StockData As New DataTable

    Try
        Dim SQL As String = "SELECT * FROM stock"
        Console.WriteLine("Connecting to MYSQL.....")
        conn.Open()
        cmd.Connection = conn
        cmd.CommandText = SQL

        Adapter.SelectCommand = cmd
        Adapter.Fill(StockData)

        ' StockViewGrid.DataSource = StockData
    Catch ex As Exception
        Console.WriteLine(ex.ToString())

    Finally
        conn.Close()
        Console.Write("Done")
    End Try

这将是sqlBulkCopy 工作的地方:

同样,我正在尝试从 stock 表中查看。

 Dim Local_connectionStr As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|stock.mdf;Integrated Security=True"
    Dim Local_conn As New SqlConnection(Local_connectionStr)
    Dim Local_cmd As New SqlCommand
    Dim Local_Adapter As New SqlDataAdapter
    Dim Local_StockData As New DataTable

    Try
        Using sqlBulkCopy As New SqlBulkCopy(Local_conn)
            'Set the database table name
            sqlBulkCopy.DestinationTableName = "stock"

            '[OPTIONAL]: Map the DataTable columns with that of the database table
            sqlBulkCopy.ColumnMappings.Add("stockId", "stockId")
            sqlBulkCopy.ColumnMappings.Add("id_android", "id_android")
            sqlBulkCopy.ColumnMappings.Add("itemCode", "itemCode")
            sqlBulkCopy.ColumnMappings.Add("quantity", "quantity")
            Local_conn.Open()
            sqlBulkCopy.WriteToServer(StockData)
            Local_conn.Close()
        End Using
    Catch ex As Exception
        Console.WriteLine(ex.ToString())

    Finally
        Local_conn.Close()
        Console.Write("Done")

    End Try


    Try
        Dim SQL As String = "SELECT * FROM stock"
        Console.WriteLine("Connecting to MYSQL.....")
        Local_conn.Open()
        Local_cmd.Connection = Local_conn
        Local_cmd.CommandText = SQL

        Local_Adapter.SelectCommand = Local_cmd
        Local_Adapter.Fill(Local_StockData)

        StockViewGrid.DataSource = Local_StockData
    Catch ex As Exception
        Console.WriteLine(ex.ToString())

    Finally
        Local_conn.Close()
        Console.Write("Done")

    End Try

【问题讨论】:

  • iirc 在调试运行时使用本地 MSSQL 数据库将其复制到您的开发文件夹中存在一些问题,然后在退出时丢弃结果。 (希望对这个问题有更好回忆的人很快就会出现!)
  • 嗯,好的,我在等待有人帮助我解决问题的同时尝试查找更多信息

标签: sql vb.net


【解决方案1】:

不幸的是,您的代码提取缺少标题等,因此不完整,我不能绝对肯定,但是在您的检索例程中,您似乎将 StockData 声明为局部变量。这意味着,虽然这很可能被来自 MySQL 的数据填充,但在退出该例程时它会立即被丢弃。因此,sqlBulkCopy 例程中的 StockData 变量将为空,因此不会插入任何内容。您需要修复您的范围并确保从 MySQL 读取的 StockData 与 SqlBulkCopy 中使用的 StockData 相同。

【讨论】:

  • 是的,这与我在 sqlserver 管理中尝试过的相同,但它仍然有效。但是当我在 stock.mdf 本地数据库中尝试我的测试项目时。它不会工作
【解决方案2】:

由于我无法发表评论(分数不够),我将把我的想法放在这里。你能用

来检查你是否得到了预期的数据
Console.WriteLine(StockData.Rows.Count.ToString)
Console.ReadLine()

另外,您的目标表没有自动递增的 PK,是吗? 很抱歉将评论作为答案。 (未经测试的代码)

【讨论】:

  • 是的,它确实有 A.I.Hmm 似乎不是我的代码问题
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多