2012-12-04 1 views
0

사용자가 몇 가지 정보로 설정할 줄을 선택하는 양식이 있습니다. 사용자가 필요한 모든 줄을 선택하고 각 선택 항목에 대해 매개 변수의 값으로 별도의 삽입 문을 수행 할 수있게하고 싶습니다. 예를 들어 사용자 선택 줄 2,3 및 25. 삽입 문을 3 번 실행하고 매번 @line 매개 변수를 선택한 다음 줄로 변경해야합니다. 내가 어떻게 그럴 수 있니? 이것은 제가 얻은 것입니다.각 체크 박스 목록 선택에 대해 별도의 발사를 실행하십시오.

 protected void btn_test_Click(object sender, EventArgs e) 
     { 

      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText = "Insert into t_ap_line_setup (line,date) values (@line,getdate())"; 
      //string strLines = ""; 

      // cmd.Parameters.Add("@line", SqlDbType.Int).Value = Convert.ToInt32(strLines); 

      cmd.Connection = this.sqlConnection1; 
      this.sqlConnection1.Open(); 

      for (int i = 0; i < lines_list.Items.Count; i++) 
      { 
       if (lines_list.Items[i].Selected) 
       { 
        cmd.Parameters.Add("@line", SqlDbType.Int).Value = Convert.ToInt32(lines_list.Items[i].Text); 
        cmd.ExecuteNonQuery(); 
       } 
      } 
      this.sqlConnection1.Close(); 
     } 

위의 논리를 가진 또 하나의 점은 두 개의 삽입을 얻고 하나의 선택으로 만 작동한다는 것입니다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요?

당신은 루프 사용할 수 있습니다

답변

0

: 나는 (심지어 예외의 경우) 그것으로 완성하고있어 즉시 연결이 배치 (폐쇄) 도착하도록

var selectedLines = CheckBoxList1.Items.Cast<ListItem>() 
      .Where(li => li.Selected) 
      .Select(li => li.Text); 
using (var con = new SqlConnection(connectionString)) 
using (var cmd = new SqlCommand("Insert into t_ap_line_setup (line,date) values (@line,getdate())", con)) 
{ 
    con.Open(); 
    foreach (string line in selectedLines) 
    { 
     cmd.Parameters.Clear(); 
     cmd.Parameters.AddWithValue("@line", int.Parse(line)); 
     cmd.ExecuteNonQuery(); 
    } 
} 

주 내가 using-statement을 사용했다 . 즉, "글로벌"연결 (사용하는 것보다 더 나은 내가 hope it is not static). 더욱 ASP.NET에서.

+0

오류가 발생했습니다. 오류 'System.Web.UI.WebControls.ListItemCollection'에 'Cast'및 최상의 확장 메서드 오버로드에 대한 정의가 없습니다. – briskovich

+0

.NET 2를 사용하는 경우에는 Linq 간단한 루프를 사용하여 쿼리하십시오 (원래 코드 에서처럼). 하지만 아마도'using System.Linq; '를 추가해야 할 것입니다. –

+0

캐스트를 사용하지 않고 값을 가져 오는 방법이 있습니까? – briskovich

0

각 레코드를 삽입하는 대신 대량 삽입을 사용하는 것이 좋습니다. 내가 여기에 코드를 보내드립니다

.

한 데이터 테이블을 만들기 checkboxlist 통해 루프. t_ap_line_setup 테이블에서 동일 필드 데 dtDetail을 말하고 값 dtDetail의 데이터 테이블을 채운다. 상기 코드

// Code for bulk insert 
if (dtDetail.Rows.Count > 0) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlBulkCopy bulk = new SqlBulkCopy(connectionString); 
    bulk.DestinationTableName = "t_ap_line_setup"; 
    bulk.WriteToServer(dtDetail); 
} 

이점이 그쪽 그것은 SQL 서버 trip.Increase 생산성을 줄일 수 있습니다.