asp.net c#中sql中的in运算符,用于更新多条记录

asp.net c#中sql中的in运算符,用于更新多条记录,c#,webforms,C#,Webforms,问题: 我将这些appid输入txtStatusChange以更新记录:1711017147175241773615906172681644017241提到,当我更新单记录(如17110)时,更新成功。更新多个记录时发生错误 异常详细信息:System.FormatException:输入字符串的格式不正确。尝试从输入创建列表 protected void btnStatuschange_Click(object sender, EventArgs e) { using

问题:

我将这些appid输入txtStatusChange以更新记录:1711017147175241773615906172681644017241提到,当我更新单记录(如17110)时,更新成功。更新多个记录时发生错误


异常详细信息:
System.FormatException:输入字符串的格式不正确。

尝试从输入创建列表

protected void btnStatuschange_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OptimaWebCustomerQueryCon"].ConnectionString))
        {
            conn.Open();
            string str = @"Update TblMasterinfo SET AppLoanStatus=@AppLoanStatus Where appid in (@Statuschange)";
            using (SqlCommand com = new SqlCommand(str, conn))
            {
                com.Parameters.AddWithValue("@Statuschange", Convert.ToInt32(txtStatusChange.Text));
                com.Parameters.AddWithValue("@AppLoanStatus",DDLStatusChange.SelectedValue);
                com.ExecuteNonQuery();
            }

            conn.Close();
        }
    }
更新:为了避免使用列表参数(可能不适用于sql Server),您可以使用以下方法:

var ids = (from x in String.Split(',', txtStatusChange.Text)
           select int.Parse(x.Trim())).ToList();

com.Parameters.AddWithValue("@Statuschange", ids);

由于您正在将字符串强制转换为列表并创建新字符串,这是从SQL注入保存的,因此我不介意在此处使用参数。

您不能在IN子句中使用常规SQL参数,但可以使用表值参数。看看这个。但它有点复杂

您可以创建不带参数的sql字符串,如下所示。这将是一种简单的方法,但要确保您的输入正确验证

var ids = (from x in String.Split(',', txtStatusChange.Text)
           select int.Parse(x.Trim())).ToList();    
var idString = String.Join(',', ids);

var str = String.Format(
    @"Update TblMasterinfo SET ... Where appid IN ({0})", idString);

请尝试com.Parameters.AddWithValue(“@Statuschange”,Convert.ToString(txtStatusChange.Text));?问题是,当您尝试更新多条记录时,请尝试将该记录拆分为一个列表。这是不可能的,请检查此项。我不明白为什么这样做不起作用(对于mysql,我非常确定它会起作用)我只需要更新:string str=@“update TblMasterinfo SET AppLoanStatus=@AppLoanStatus Where appid in(“+txtStatusChange.Text+”);谢谢大家对我的支持。
var ids = (from x in String.Split(',', txtStatusChange.Text)
           select int.Parse(x.Trim())).ToList();    
var idString = String.Join(',', ids);

var str = String.Format(
    @"Update TblMasterinfo SET ... Where appid IN ({0})", idString);
string input ="17110,17147,17524,17736,15906,17268,16440,17241";
string str = string.Format("Update TblMasterinfo SET AppLoanStatus=@AppLoanStatus Where appid in ({0})",input);
using (SqlCommand com = new SqlCommand(str, conn))
{
    com.Parameters.AddWithValue("@Statuschange", Convert.ToInt32(txtStatusChange.Text));
    com.ExecuteNonQuery();
}