更新sql中的问题

时间:2009-12-02 17:33:00

标签: c# sql

我有一个更新语句,它会出现错误“无法将String []中的参数值转换为字符串。”

SqlCommand comm1 = new SqlCommand("UPDATE count set ETR=@ETR WHERE Id IN ( " + itemIDs + ")", connection);
                comm1.Parameters.Add("@ETR", System.Data.SqlDbType.VarChar, 50);
                comm1.Parameters["@ETR"].Value = delivery;

其中itemID是一个数组。现在我想设置值ETR等于从数组“delivery”中检索到的值.i意味着对于每个itemID,在传递数组中有一个值,并且此命令设置值为每个itemID的ETR到交付数组中的相应值

5 个答案:

答案 0 :(得分:3)

您应该为交货中的每件商品执行1更新命令,最好包含在交易中。

SqlTransaction tx = connection.BeginTransaction();
SqlCommand comm1 = new SqlCommand("UPDATE count set ETR=@ETR WHERE Id=@ID", connection);
comm1.Connection = connection;
comm1.Transaction = transaction;
comm1.Parameters.Add("@ID", System.Data.SqlDbType.Int);
comm1.Parameters.Add("@ETR", System.Data.SqlDbType.VarChar, 50);
for(int i = 0; i < itemIDs.Count; i++) {



    comm1.Parameters["@ID"].Value = itemIDs[i];

    comm1.Parameters["@ETR"].Value = delivery[i];
    comm1.ExecuteNonQuery();
 }
 tx.Commit();

答案 1 :(得分:1)

我猜测ItemIds是一个字符串数组。您需要构建一个将itemID写入逗号分隔字符串

的函数
public string ArrayToCsv(string[] arr)
{
    StringBuilder sb = new StringBuilder();
    for each(string e in arr)
    {
        sb.Append(e);
        sb.Append(',');
    }

    if (sb.Length > 0)
        sb.Remove(sb.Length - 1, 1);

    return sb.ToString();
}

我只是通过内存中的代码,所以它可能不是100%准确,但它应该给你一个想法。

答案 2 :(得分:1)

  

comm1.Parameters.Add( “@ ETR”,   System.Data.SqlDbType.VarChar,50);   comm1.Parameters [“@ ETR”]。值=   递送;

您的参数“@ETR”是一个字符串。正如你自己所说,你分配给它“交付”的东西是一系列字符串。那将无济于事。

你需要以某种方式重新思考你的逻辑。

答案 3 :(得分:0)

SQL语句期望逗号分隔的字符串,特别是IN。 只需将数组传递给一个函数,该函数接收数组并将123456更改为1,2,3,4,5,6 把它传回来。

答案 4 :(得分:0)

  

他的问题不在itemID中,而是在语句comm1.Parameters [“@ ETR”]中。值=交付;因为ETR是一个字符串而且是一个恶魔,我想在ETR中传递每个传递值

与包含所有值或不同记录的记录一样?

使用一条记录,您需要将字符串数组解析为csv等。

StringBuilder sb = new StringBuilder();
foreach (string s in Delivery)
{
    sb.Append(s);
    sb.Append(",");
}
sb.Remove(sb.Length-2,1).ToString();