【问题标题】:Insert datatable into a database table from a stored procedure从存储过程将数据表插入数据库表
【发布时间】:2012-03-18 19:41:04
【问题描述】:

我有一个包含一些行的数据表,我需要使用存储过程将该数据表插入到数据库中。

 For Each row As DataRow In dt.Rows
            cmd.Parameters.Add(New MySqlParameter("@DOWNLOAD_ID", dt.Rows(0)("DOWNLOAD_ID").ToString()))
            cmd.Parameters.Add(New MySqlParameter("@FINALY_FIELDCODE", dt.Rows(0)("FINALY_FIELDCODE").ToString().Replace("|", "").ToString()))
            cmd.Parameters.Add(New MySqlParameter("@UNITS", dt.Rows(0)("UNITS").ToString()))
            cmd.Parameters.Add(New MySqlParameter("@CURRECY_CODE", dt.Rows(0)("CURRENCY_CODE").ToString()))
        Next
        cmd.ExecuteNonQuery()

当我这样做时,我得到了一个异常{"Parameter '@DOWNLOAD_ID' has already been defined."} 如何摆脱这个异常,我们可以在没有 for 循环的情况下插入数据表。 谁能帮帮我

【问题讨论】:

    标签: asp.net vb.net ado.net datatable


    【解决方案1】:

    您应该创建单独的 MySqlCommands 并直接执行它们:

    Using mysqlConnection = New MySqlConnection(connectionString)
        mysqlConnection.Open()
        For Each row As DataRow In dt.Rows
            Using cmd = New MySqlCommand("StoredProcedureName", mysqlConnection)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add(New MySqlParameter("@DOWNLOAD_ID", dt.Rows(0)("DOWNLOAD_ID").ToString()))
                cmd.Parameters.Add(New MySqlParameter("@FINALY_FIELDCODE", dt.Rows(0)("FINALY_FIELDCODE").ToString().Replace("|", "").ToString()))
                cmd.Parameters.Add(New MySqlParameter("@UNITS", dt.Rows(0)("UNITS").ToString()))
                cmd.Parameters.Add(New MySqlParameter("@CURRECY_CODE", dt.Rows(0)("CURRENCY_CODE").ToString()))
                cmd.ExecuteNonQuery()
            End Using
        Next
    End Using
    

    【讨论】:

    • :hi.. 感谢它的工作。但 download_id 和 finaly_fieldcode 是主键。我可以使用相同的 download_id 查询手动插入记录。我无法从存储过程中插入它
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多