1
    <asp:DropDownList ID="DDLStatusChange" runat="server" AppendDataBoundItems="true">
    <asp:ListItem>-Select-</asp:ListItem>
    <asp:ListItem>Just Received</asp:ListItem>
    <asp:ListItem>Post Approval</asp:ListItem>
    </asp:DropDownList>
    <asp:TextBox ID="txtStatusChange" runat="server" Width="200"></asp:TextBox>
    <asp:Button ID="btnStatuschange"
        runat="server" Text="Status Change" onclick="btnStatuschange_Click" />

C#背后的代码

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

问题:

我在txtStatusChange中输入这些appid进行更新记录:17110,17147,17524,17736,15906,17268,16440,17241提到当我像17110一样更新单个记录时,更新成功。更新多个记录时发生错误

异常详情: System.FormatException: Input string was not in a correct format.

4

2 回答 2

2

尝试根据您的输入创建一个列表

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

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

更新:为避免使用 List 参数(可能不适用于 sql sever),您可以使用以下方法:

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

由于您将字符串转换为 List 并创建一个新字符串,这是从 SQL 注入中保存的,所以我不介意在这里不使用参数。

于 2013-06-10T05:45:34.040 回答
0

IN 子句不能使用普通的 SQL 参数,但可以使用表值参数。检查这个答案。但这有点复杂

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

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();
}
于 2013-06-10T05:52:48.693 回答