2013-07-09 4 views
0

내 웹 사이트에 listbox 항목이 selectionmode 인 "multilple"로 있습니다. 제출 버튼을 클릭하면 서버의 sql 서버에있는 표의 열에 선택한 항목을 모두 삽입하려고합니다.SQL 서버의 테이블 셀에 여러 값을 삽입하는 방법

이것은 내 listbox 항목입니다.

<asp:TableCell> 
    <asp:ListBox ID="lbLanguagesKnown" runat="server" Height="217px" 
     SelectionMode="Multiple"> 
     <asp:ListItem Selected="True" Value="-1">-Select Languages-</asp:ListItem> 
     <asp:ListItem Value="1">Arabic</asp:ListItem> 
     <asp:ListItem Value="2">Bengali</asp:ListItem> 
     <asp:ListItem Value="3">English</asp:ListItem> 
     <asp:ListItem Value="4">German</asp:ListItem> 
     <asp:ListItem Value="5">Hindi</asp:ListItem> 
     <asp:ListItem Value="6">Japanese</asp:ListItem> 
     <asp:ListItem Value="7">Javanese</asp:ListItem> 
     <asp:ListItem Value="8">Mandarin</asp:ListItem> 
     <asp:ListItem Value="9">Others</asp:ListItem> 
     <asp:ListItem Value="10">Portuguese</asp:ListItem> 
     <asp:ListItem Value="11">Russian</asp:ListItem> 
     <asp:ListItem Value="12">Spanish</asp:ListItem> 
    </asp:ListBox> 
</asp:TableCell> 

어떻게 가능합니까? 도와주세요.

+2

FYI 테이블은 * columns *, not * cells *. 세포는 스프레드 시트와 감옥에서 발견됩니다. –

+0

죄송합니다. 나는 그것을 바로 잡았다. – Tannya

+0

사실 나는 textboxes, 달력 컨트롤, fileupload 등등과 같은 많은 다른 컨트롤이 있습니다. 제출 버튼이 있습니다. 클릭하면 그 모든 값을 사용자 테이블에 삽입하고 싶습니다. 목록 상자 항목이 많은 수 이후, 나는 다른 최대 붙어있다. – Tannya

답변

0

모든 값을 결합하고 단일 컬럼에 넣어와 함께 AT ALL 좋은 생각이 아니다. .. 위와 같이 대답은 데이터 정규화를위한 1NF 조건조차 충족시키지 못합니다. 결과적으로 비효율적 인 디스크 공간 사용, 느린 쿼리 (내 이해에서 이러한 테이블에서 결과를 얻으려면 지저분합니다)가 발생합니다. 그러나 만약 당신이 여전히 그것을하고 싶다면 delimeter (, 또는 /)를 사용하여 값을 연결하고 나중에 필요할 때 나눌 수 있도록 삽입 할 수 있습니다 ..

+0

정말 고마워요. – Tannya

5

첫 번째 정규 양식조차 깨기 때문에이 작업을 수행하지 않으실 것입니다. 대신 관계를 다 대다 (many-to-many) 모델로 만드는 것이 더 합리적 일 수 있습니다.

는이 경우 접합 테이블의 각 행에 대해 두 개의 외래 키를 사용하여 많은 사용자에게 많은 언어를 연결 한 후 Languages 테이블, (예를 들어) User 테이블 및 junction table (예를 들어, LanguagesKnown)을 가질 것이다. 내가 SQL 주입을 방지하기 위해 SQL-매개 변수를 사용했다

string sql = "INSERT INTO dbo.Language VALUES(@languageID, @languageName);"; 
using (var con = new SqlConnection(yourConnectionString)) 
using(var cmd = new SqlCommand(sql, con)) 
{ 
    con.Open(); 
    foreach (ListItem item in lbLanguagesKnown.Items) 
    { 
     cmd.Parameters.Clear(); 
     if (item.Selected) 
     { 
      cmd.Parameters.AddWithValue("@languageID", int.Parse(item.Value)); 
      cmd.Parameters.AddWithValue("@languageName", item.Text); 
      int insertedCount = cmd.ExecuteNonQuery(); 
     } 
    } 
} 

:

+1

+1,하지만 OP가이 시점에서 데이터베이스를 설계 할 수있는 것에 가깝다고는 생각하지 않습니다. –

2

당신은 간단한 루프를 사용할 수 있습니다. using -statement는 (예외가 발생한 경우에도) 가능한 한 빨리 연결을 닫는 데 사용됩니다.

그러나 요구 사항은 거의 이해가되지 않습니다. 왜 사용자가 masterdata를 삽입 할 때 masterdata를 삽입하려고 하는가? 마치 언어 테이블에 링크 된 다른 테이블에 실제로 삽입하려는 것처럼 들립니다. 예를 들어

:

표 : UserLanguagesLanguageID + UserID

표 2 : Languages 위의 모델

+0

사용자가 선택한 값만 테이블에 삽입하려고합니다. 또한 사용자 이름, 암호, DOB, 파일 업로드 및 다운로드 컨트롤을 허용하는 텍스트 상자와 같은 많은 다른 컨트롤이 있습니다. 페이지에 제출 버튼이 있습니다. 내가 그걸 클릭하면, 나는이 모든 값을 사용자 테이블에 삽입하고 싶습니다. – Tannya

관련 문제