批量INSERT INTO mySQL或无插入无任何错误VB.Net

时间:2014-08-24 07:41:09

标签: mysql vb.net batch-processing insert-into

我从网页下载了自动收报机的交易记录(股票代码,时间,交易量,收盘价)。由于每个页面只显示20个事务,我确定总页数没有,然后循环获取所有记录。

由于我在网页上找不到该ID的唯一ID,甚至同一时间的同一个自动收报机,也可能发生相同的数量和相同的价格。 最初我将一条记录更新到mySQL数据库,但是,问题可能会出现。如果两者之间存在错误,请说出150条记录中的第30条。删除之前的记录并重新进行重做或其他任何操作都很麻烦。我想要的是所有 150条记录都可以成功地插入到表或NONE 中,如果有任何错误会提示我修复它。请帮忙。

如果是这样,我会将所有从所有Pages中的记录中获取的值存储到一个数组中,比如arrValue(iNoOfRecords,Value)< - 可能会出现另一个问题,如果是这样,我担心数据类型会是丢失在我的阵列中。然后插入数据库mySQL。由于有150条记录,重复以下说150次。

 cmd.Parameters.AddWithValue("@Ticker", Ticker)
 cmd.Parameters.AddWithValue("@Price", Price)
 cmd.Parameters.AddWithValue("@Volume", Volume)
 cmd.Parameters.AddWithValue("@MyTime", MyTime)

以上x 150集

或者我可以在添加所有参数的所有页面中的所有记录的末尾执行“cmd.ExecuteNonQuery()”。即插入所有参数后将运行以下代码。

 Try
      cnn.Open()
      cmd.ExecuteNonQuery()
 Catch ex As Exception
      MsgBox(ex.ToString)
 End Try

mySql,Engine:InnoDB中的字段的数据类型,表:Blocktrade {Ticker,string},{Price,decimal(10,3)},{Volume,BIGINT} (我不知道如何在vb.net中的数组中指定它)

以下是目前使用的VB.Net部分:

 Using cmd As New MySqlCommand("INSERT INTO Blocktrade (Ticker,Price, Volume, MyTime) VALUES (@Ticker,@Price,@MyTime)", cnn)
         cmd.Parameters.AddWithValue("@Ticker", Ticker)
         cmd.Parameters.AddWithValue("@Price", Price)
         cmd.Parameters.AddWithValue("@Volume", Volume)
         cmd.Parameters.AddWithValue("@MyTime", MyTime)
         Try
              cnn.Open()
              cmd.ExecuteNonQuery()
         Catch ex As Exception
              MsgBox(ex.ToString)
         End Try
    End Using

这只是我'愚蠢'的想法',我不知道VB.Net和mySQL是否可以实现。请帮忙。感谢

1 个答案:

答案 0 :(得分:1)

如果在所有插入操作完成之前出现问题,您可以尝试使用SqlTransaction来回滚更改,例如(改编自MSDN: BeginTransaction()):

Using connection As New SqlConnection(connectionString)
    connection.Open()

    Dim command As SqlCommand = connection.CreateCommand()
    Dim transaction As SqlTransaction

    ' Start a insert transaction'
    transaction = connection.BeginTransaction("InsertTransaction")

    ' Must assign both transaction object and connection' 
    ' to Command object for a pending insert transaction.'
    command.Connection = connection
    command.Transaction = transaction

    Try
        'Prepare command and do all Insert operations here'

        ' Attempt to commit the transaction.'
        transaction.Commit()
        Console.WriteLine("Also records are inserted to database.")

    Catch ex As Exception
        Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
        Console.WriteLine("  Message: {0}", ex.Message)

        ' Attempt to roll back the transaction. '
        Try
            transaction.Rollback()

        Catch ex2 As Exception
            ' This catch block will handle any errors that may have occurred '
            ' on the server that would cause the rollback to fail, such as '
            ' a closed connection.'
            Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
            Console.WriteLine("  Message: {0}", ex2.Message)
        End Try 
    End Try 
End Using