2015-01-11 8 views
0

여러 확인란에서 데이터를 저장하는 가장 좋은 방법은 무엇입니까 ?? 50, 60 개의 체크 박스가있는 경우여러 가지 확인란의 데이터를 ASP 마스터 페이지의 sqlserver에 저장하는 가장 좋은 방법

각 질문 별 값을 저장하기 위해 50 개 또는 60 개의 체크 박스 열을 별도로 설정하는 것이 합리적입니까? 그리고 아마 내가해야 할 일에 응답하지 않은 질문이 있습니까 ??

<div class="form-group">  
          <div class="form-group"> 
          <label class="control-label"> 
           Moderate 
           </label> 

           <asp:CheckBox ID="CheckBox2" runat="server" class="form-control" /> 
          </div> 

           <div class="form-group"> 
          <label class="control-label"> 
           Heavy 
           </label> 

           <asp:CheckBox ID="CheckBox3" runat="server" class="form-control" /> 
          </div> 


         <div class="form-group"> 
          <label class="control-label"> 
           Y 
           </label> 

           <asp:CheckBox ID="CheckBox4"runat="server" class="form-control" /> 
          </div> 
          <div class="form-group"> 
          <label class="control-label"> 
           N 
           </label> 

           <asp:CheckBox ID="CheckBox5" runat="server" class="form-control" /> 
          </div> 

and so on ... 
+0

가능한 방법은 여러 가지가 있습니다. 그러나 이러한 "질문"또는 체크 박스는 어떻게 상호 연관되어 있습니까? 구성 설정입니까? 50 가지의 진실과 거짓 질문? 나중에 더 많은 질문이 추가 될 수 있습니까? 이러한 질문에 대한 대답은 데이터 모델링에 사용하는 방식과 직접 관련이 있다고 말할 수 있습니다. P. 체크 박스마다 마크 업을 반복하지 말고 가능한 경우 CheckBoxList를 사용해보십시오. 예/아니오 Q 그것의 일부 : 객관식 가능 당신이 체크 박스/CheckBoxLists 및 RadioButtonLists의 조합이 필요합니다 같은 추가 나중에 – thesentiment

+0

는 질문 중 일부는 ... 감사합니다. 이상적으로는 질문을 명확하게 생성 할 수있는 역동적 인 것이 필요할 것입니다. rot26은 하나의 가능한 해결책을 만났습니다. – user3663203

+1

것 같다 더 이상 질문 할 – thesentiment

답변

2

thesentiment 말했듯이 나는 중 하나 CheckBoxList 내 체크 박스를 설정하는 것, 또는 레이아웃을 더 세밀하게 제어해야 할 경우, 당신은 질문 목록에 결합 할 수있는 리피터 같은 내부에 같은 마크 업을 사용할 수 있습니다/데이터베이스에 저장된 응답. 각 질문마다 데이터베이스를 별도로 호출하고 싶지 않으므로 각 대답을 개별적으로 저장하지 않아도되지만 한 번에 모든 대답을 다시 전달하는 전화를해야합니다. 기본적으로 저장시 CheckBoxList 또는 Repeater Items (컨트롤 자체의 컬렉션이어야 함)를 반복하고 확인 된 응답의 값을 가져옵니다.

db 디자인을 몰라도 저장 방법론이 무엇인지 말해주는 것은 어렵습니다. 나는 내가하려는 것은 질문과 질문 당 AnswerID를 데이터베이스 나 그와 비슷한 것으로 돌려 보내는 것입니다. 이것을 성취하기위한 많은 재미있는 방법이 있습니다. 비교적 쉬운 방법은 저장 루프에 xml을 만들어 SQL Server에 전달한 다음이 xml을 사용자 지정 테이블 반환 함수를 사용하여 CTE로 구문 분석하는 것입니다. 나는이 글에서 약간 녹슬었지만 QuestionID와 AnswerID를 열로 사용하여 SQL Server에서 사용자 정의 테이블 형식을 설정할 수도 있다고 생각합니다. 그런 다음 save 루프에서 기본적으로 전달할 테이블을 만듭니다. 데이터 집합으로이 작업을 수행 할 수 있다고 생각합니다. 다시 말하지만, 저는 그런 식으로 익숙하지 않습니다. 어떤 방법을 선택하든 주요 아이디어는 하나의 테이블/레코드 목록 또는 키 - 값 쌍을 저장하는 것입니다.

SQL Server에서는이 테이블 또는 CTE에서 Update 문을 작성하기 만하면됩니다.

선택이없는 답변을 삭제해야하는 경우이를 수행하는 방법이 몇 가지 있습니다. 대답이있는 QuestionID 만 다시 전달하면 not exists where 절을 사용하여 AnswerID를 null로 설정하거나 해당 QuestionID가 해당 사용자의 db 테이블에 있지만 전달 된 테이블이나 CTE가 아닌 곳에 모두 삭제할 수 있습니다. 또는 저장 루프에서 AnswerID를 0 또는 -1로 설정할 수 있습니다. 예를 들어 quesiton에 대한 선택이없고 Update에서 Case 문을 사용하여 해당 값이있을 때 AnswerID를 null로 설정할 수 있습니다.

사용자 설정에 따라 적절하게 조정할 수 있지만 시작하는 데 도움이되기를 바랍니다.

+0

당신의 대답은 유용하지만 고맙습니다.하지만 나는 SQL 서버 db에서 테이블 크기를 사용자 정의하는 가장 좋은 방법을 알고 싶습니다. 아직 데이터베이스를 만들지 않았습니다. – user3663203

+1

"테이블 크기 사용자 정의"란 정확히 무엇을 의미합니까? 테이블에있는 열의 데이터 유형을 의미합니까? rot26는 당신이 위에서 할 수있는 것을 거의 요약했습니다. – thesentiment

+1

@ rot26, 예, 사용자 정의 테이블 유형을 사용 중입니다. 가장 좋은 방법은 .NET 측에서 DataTable을 사용하여 데이터 집합을 업데이트하는 저장 프로 시저에 값 집합을 전달하는 것입니다. 저장 프로시 듀어에는 사용자 정의 테이블 유형 인 데이터 유형의 매개 변수가 있습니다. XML도 작동 할 것이지만 너무 친숙하지는 않습니다. 파싱이 필요하기 때문에 데이터를 직접 전달하는 것만 큼 효율적이 아닐 수도 있지만 시작으로 충분할 것입니다. – thesentiment