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