gpt4 book ai didi

asp.net - C# - 一次向 AS400 插入多条记录

转载 作者:行者123 更新时间:2023-12-03 17:52:48 25 4
gpt4 key购买 nike

我有这样的问题:
1. 我使用 C# ASP .Net 从 MySQL 检索数据。 - 完毕 -
2. 将第 1 号的所有数据插入到 AS400 上的表中。 -- 这一步出错了 --
错误消息说 ERROR [42000] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 - Token ; was not valid. Valid tokens: <END-OF-STATEMENT>. .确实,我使用分号来分隔查询,但这是不允许的。我谷歌搜索,但我找不到解决方案。
我的问题是什么<END-OF-STATEMENT>该错误消息的意思..?
这是我的源代码。

private static void doInsertDOCADM(MySqlConnection conn)
{
// Get Temporary table
String query = "SELECT * FROM TB_T_DOC_TEMPORARY_ADM";
DataTable dt = CSTDDBUtil.ExecuteQuery(query);

OdbcConnection as400Con = null;
as400Con = CSTDDBUtil.GetAS400Connection();
as400Con.Open();

if (dt != null && dt.Rows.Count > 0)
{
int counter = 1, maxInsertLoop = 50;

using (OdbcCommand cmd = new OdbcCommand())
{
cmd.Connection = as400Con;

foreach (DataRow dr in dt.Rows)
{
cmd.CommandText += "INSERT INTO DCDLIB.WDFDOCQ VALUES " + "(?,?,?,?);";

cmd.Parameters.Add("1", OdbcType.VarChar).Value = dr["PROD_MONTH"].ToString();
cmd.Parameters.Add("2", OdbcType.VarChar).Value = dr["NEW_MAIN_DEALER_CD"].ToString();
cmd.Parameters.Add("3", OdbcType.VarChar).Value = dr["MODEL_SERIES"].ToString();
cmd.Parameters.Add("4", OdbcType.VarChar).Value = dr["MODEL_CD"].ToString();


if (counter < maxInsertLoop)
{
counter++;
}
else
{
counter = 1;
cmd.ExecuteNonQuery();
cmd.CommandText = "";
cmd.Parameters.Clear();
}
}

if (counter > 1) cmd.ExecuteNonQuery();
}
}

注意:我使用这种方式(先收集一些查询,然后执行这些查询)来提高我的应用程序的性能。

最佳答案

正如 Clockwork-Muse 所指出的,问题在于您只能在一个命令中运行单个 SQL 语句。 iSeries 服务器不会一次处理多个语句。

如果您的 iSeries 服务器运行的是 V6R1 或更高版本,那么您可以使用块插入来插入多行。我不确定您是否可以通过 ODBC 驱动程序执行此操作,但是由于您具有 Client Access,您应该能够安装 iSeries ADO.NET 驱动程序。 ADO.NET iSeries 驱动程序和 ODBC 驱动程序之间没有太多区别,但是通过 ADO.NET,您可以访问 iSeries 特定功能。

使用 ADO.NET 驱动程序,多次插入变得很简单:

    using (iDB2Connection connection = new iDB2Connection(".... connection string ..."))
{
// Create a new SQL command
iDB2Command command =
new iDB2Command("INSERT INTO MYLIB.MYTABLE VALUES(@COL_1, @COL_2", connection);

// Initialize the parameters collection
command.DeriveParameters();

// Insert 10 rows of data at once
for (int i = 0; i < 20; i++)
{
// Here, you set your parameters for a single row
command.Parameters["@COL_1"].Value = i;
command.Parameters["@COL_2"].Value = i + 1;
// AddBatch() tells the command you're done preparing a row
command.AddBatch();
}

// The query gets executed
command.ExecuteNonQuery();
}
}

IBM 还提供了一些使用 VB6 和 ODBC 进行块插入的引用代码,但我不确定它是否可以轻松移植到 .NET: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzaik%2Frzaikextfetch.htm

希望有帮助。

关于asp.net - C# - 一次向 AS400 插入多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com