2013-06-29 1 views
0

관리자는 드롭 다운 목록에서 사용자를 선택하고 해당 사용자와 관련된 역할을 확인란에 표시하도록 할 수 있습니다. 나는 아래의 코드를 실행하려고하면이 문제를 해결하기 위해 int 데이터 형식varchar 값 'John Mayer'를 데이터 유형 int로 변환 할 때 변환하지 못했습니다. "라는 오류가 발생합니다.

모든 아이디어를 어떻게에 '존 메이어 (John Mayer)'는 VARCHAR 값을 변환 할 때

, 나는

변환 실패거야?

아래 코드는 제가 사용하고있는 코드입니다.

'//Markup 
<p> 
    <b>Select a User:</b> 
    <asp:DropDownList ID="UserList" runat="server" AutoPostBack="True" 
      DataTextField="UserName" DataValueField="LoginId" OnSelectedIndexChanged="UserList_SelectedIndexChanged"> 

    </asp:DropDownList> 
</p> 
<p> 
    <div class="roleList"> 
     <asp:CheckBoxList ID="RoleList" runat="server"> 
     </asp:CheckBoxList> 
    </div> 

'//CodeBehind 
Public Sub PopulateUserList() 
     Dim cmd As New SqlCommand("Select LoginId,UserName from tblLogin", New SqlConnection(ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString)) 
     cmd.Connection.Open() 

     Dim ddlValues As SqlDataReader 
     ddlValues = cmd.ExecuteReader() 

     UserList.DataSource = ddlValues 
     UserList.DataValueField = "LoginId" 
     UserList.DataTextField = "UserName" 
     UserList.DataBind() 

     cmd.Connection.Close() 
     cmd.Connection.Dispose() 
    End Sub 

    Protected Sub UserList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

     Dim conn As String = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString 

     Dim ds As DataSet = New DataSet() 

     Dim sql As String = "select UserRoles from tblLogin where userName = " + UserList.SelectedValue 

     Dim AD As New SqlDataAdapter(sql, conn) 
     AD.Fill(ds, "table") 

     RoleList.DataSource = ds.Tables(0) 
     RoleList.DataTextField = "UserRoles" 
     RoleList.DataValueField = "LoginId" 
     RoleList.DataBind() 

    End Sub 

당신이

+2

[SQL 인젝션 경고] (http://msdn.microsoft.com /en-us/library/ms161953%28v=sql.105%29.aspx) - ** SQL 문을 연결하지 말아야 ** SQL 주입을 피하기 위해 ** 매개 변수화 된 쿼리 **를 대신 사용하십시오. –

답변

2

아마 당신은 테이블에서 또한은 loginid를 검색 할 필요가 감사뿐만 아니라 UserRoles

Protected Sub UserList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Dim conn As String = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString 

    Dim ds As DataSet = New DataSet() 

    Dim sql As String = "select LoginId, UserRoles from tblLogin " + 
         "where userName = @uname" 

    Dim AD As New SqlDataAdapter(sql, conn) 
    AD.SelectCommand.Parameters.AddWithValue("@uname", UserList.SelectedItem.Text) 
    AD.Fill(ds, "table") 

    RoleList.DataSource = ds.Tables(0) 
    RoleList.DataTextField = "UserRoles" 
    RoleList.DataValueField = "LoginId" 
    RoleList.DataBind() 
+0

marc_s, 감사합니다. 2 질문. 드롭 다운 목록에서 첫 번째 옵션 만 선택할 수있는 이유는 무엇입니까? 다른 옵션을 선택해도 첫 번째 확인란 값만 표시됩니다. 확인란을 미리 선택하려면 어떻게해야합니까? – Kenny

+0

@Kenny 죄송 합니다만,이 질문에 도움을받을 수는 없지만 쿼리에서 얼마나 많은 사용자를 검색합니까? (사용자에게 알리려면 사용자 이름 앞에 @ 접두사를 사용하십시오.) – Steve

+0

접두사를 사용했다고 생각합니다. 한 번만 사용할 수 있다는 것은 내 이해입니다. 어쨌든 Steve는 테스트를 위해 5 명의 사용자가 드롭 다운 목록을 채 웁니다. 그래서 user1을 선택하고 체크 박스에 자신의 역할이 표시되도록하고 싶습니다. 지금까지 드롭 다운 목록에서 선택한 사용자에 관계없이 드롭 다운 목록의 첫 번째 옵션에 대한 값만 표시되었습니다. – Kenny

관련 문제