繁体   English   中英

与Parameters.AddWithValue问题并遍历DataTable

[英]Issue with Parameters.AddWithValue and looping through DataTable

我有一个看起来像这样的数据表:

[0]    [1]
"Z12"  "Company A"
"A32"  "Company B"
"K54"  "Company C"

我试图遍历所有行,并使用以下代码将它们添加到Access表中:

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myDB.accdb");

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = myConnection;
cmd.CommandType = CommandType.Text;

myConnection.Open();

for (int i = 0; i <= dt.Rows.Count - 1; i++)
    {
        cmd.CommandText = "INSERT INTO xCARRIER (CARRIER_ID, CARRIER_NAME) VALUES (@p1, @p2)";

        cmd.Parameters.AddWithValue("@p1", dt.Rows[i].ItemArray.GetValue(0));
        cmd.Parameters.AddWithValue("@p2", dt.Rows[i].ItemArray.GetValue(1));

        cmd.ExecuteNonQuery();
    }

myConnection.Close();

当我进入Access并查看xCARRIER表时,它看起来像这样:

"Z12"  "Company A"
"Z12"  "Company A"
"Z12"  "Company A"

当我单步执行代码时,看起来好像正在正确遍历DataTable。 不过,我不确定为什么要添加第一行3次。 有任何想法吗?

谢谢!

您可以在每次迭代后清除Command参数:

 command.Parameters.Clear();

因此,您的代码如下所示:

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myDB.accdb");

OleDbCommand cmd = new OleDbCommand();

cmd.Connection = myConnection;
cmd.CommandType = CommandType.Text;

myConnection.Open();

for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
    cmd.Parameters.Clear(); 
    cmd.CommandText = "INSERT INTO xCARRIER (CARRIER_ID, CARRIER_NAME) VALUES (@p1, @p2)";

    cmd.Parameters.AddWithValue("@p1", dt.Rows[i].ItemArray.GetValue(0));
    cmd.Parameters.AddWithValue("@p2", dt.Rows[i].ItemArray.GetValue(1));

    cmd.ExecuteNonQuery();
}

myConnection.Close();

或者只是更新以前的参数值:

for (int i = 0; i <= dt.Rows.Count - 1; i++)
{
    cmd.CommandText = "INSERT INTO xCARRIER (CARRIER_ID, CARRIER_NAME) VALUES (@p1, @p2)";

    cmd.Parameters.AddWithValue["@p1"] = dt.Rows[i].ItemArray.GetValue(0));
    cmd.Parameters.AddWithValue["@p2"] = dt.Rows[i].ItemArray.GetValue(1));

    cmd.ExecuteNonQuery();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM