繁体   English   中英

sql中的更新问题

[英]update problem in sql

我有一条更新语句,该语句给出错误“无法将参数值从String []转换为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;

其中itemIDs是一个array.now,我想将值ETR设置为等于从数组“传递”中检索的值。我的意思是说,对于每个itemID,传递数组中都有一个值,此命令应该为每个传递ID设置ETR的值itemID到交货数组中的对应值

您应该对交付中的每个项目都执行1条update命令,最好将其包装在交易中。

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();

我猜想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%准确,但是应该可以给您一个思路。

comm1.Parameters.Add(“ @ ETR”,System.Data.SqlDbType.VarChar,50); comm1.Parameters [“ @ ETR”]。Value =投放;

您的参数“ @ETR”是单个字符串。 正如您自己说的那样,您要分配给它的内容“传递”是一个字符串数组。 那永远都行不通。

您需要以某种方式重新考虑您的逻辑。

SQL语句期望用逗号分隔的字符串,尤其是对于IN。 只需将数组传递给一个函数,该函数接受该数组并将123456更改为1,2,3,4,5,6并将其传递回去。

问题不在itemID中,而是在语句comm1.Parameters [“ @ ETR”]。Value = delivery中; 因为ETR是一个字符串,而devilry是一个数组,我想在ETR中传递每个交付值

就像在一条记录中包含所有值还是在不同记录中?

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

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

暂无
暂无

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

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