2013-06-10 3 views
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#в операторе SQL из asp.net C# для обновления несколько Record

protected void btnStatuschange_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OptimaWebCustomerQueryCon"].ConnectionString)) 
     { 
      conn.Open(); 
      string str = @"Update TblMasterinfo SET [email protected] 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, это обновление успешно. ошибка произошла, когда более чем один recored обновляются

Сведения об исключении:System.FormatException: Input string was not in a correct format.

+0

Можете ли вы попробовать com.Parameters.AddWithValue ("@ Statuschange", Convert.ToString (txtStatusChange.Text)) ;? –

+0

проблема заключается в том, что при попытке обновить более одной записи попытайтесь разбить запись на список. – Sabilv

ответ

2

Попробуйте создать список из вашего входа

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

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

Update: Для того, чтобы избежать использования параметра 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); 

Поскольку вы вставляете свою строку в список и создаете новую строку, это избавляет от SQL-инъекции, поэтому я не буду использовать параметр здесь.

+0

Это не возможно, проверьте это http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause – Damith

+0

Я не понимаю, почему это не должно работать (с mysql. Я уверен, что это будет работать) –

0

Вы не можете использовать обычные параметры SQL для предложения IN, но вы можете использовать параметры таблицы. проверьте это answer. но он бит сложный

Вы можете создать строку sql без параметра, как показано ниже. Это будет легкий путь, но убедитесь, что ваш вход должным образом подтвержден

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

У меня просто обновление: string str = @ "Обновить TblMasterinfo SET AppLoanStatus = @ AppLoanStatus Где appid в (" + txtStatusChange.Text + ")"; –

+0

Спасибо всем за поддержку. –

Смежные вопросы