asp.net
  • sql
  • vb.net
  • count
  • 2011-04-12 9 views 0 likes 
    0

    .NET Framework 4.0에서 Sql Server 2005 및 Vb Studios 2010을 사용하고 있습니다. 데이터베이스에서 정확한 행 수를 얻고 데이터 테이블을 채우고 레이블에 행 수를 표시하려고합니다.행 가져 오기 1의 값만 반환합니다.

    Dim comm2 = db.selectcommand(db.conn, "*", "Tablename", " columnname = '" & Session(sessionvariable) & "' AND columnname = 'Unread '") 
        Dim sqlda2 As New SqlDataAdapter(comm2) 
        Dim dt2 As New DataTable 
        sqlda2.Fill(dt2) 
        Dim recordcount As Integer = dt2.Rows.Count 
        messagecountlbl.Text = recordcount 
    

    이 항상 1의 값을 반환하고 난 내가 내려고하고있는 데이터에 대한 여러 값을 가지고 있다는 사실을 알고있다. 나는 적어도 50을 가지고 있고 그 라벨은 그 양을 보여 주어야한다.

    또한 Select Count 문을 시도했으며 동일한 작업을 수행했습니다. 나는 내가 쓴 그 클래스 파일에 나중에 단축 빠르고 간단한 수정을 발견했지만이 수행해야합니다 질문에 대답하기 위해 24 시간 대기가 있기 때문에

    수정 나는 게시물이 추가되었습니다 많은 사람들을 돕는다.

    Dim sqlresult As Object 
        Dim constring As String = "Connection string goes here" 
        Dim dbcon As SqlConnection = New SqlConnection(constring) 
        Dim sql As New SqlCommand 
        dbcon.Open() 
        sql.Connection = dbcon 
        sql.CommandText = "SELECT COUNT (*) FROM Tablename WHERE Columnname = 'Unread' AND columnname = '" & Session("sessionvariable") & "'" 
        sqlresult = sql.ExecuteScalar 
        messagecountlbl.Text = sqlresult 
    
    +0

    내가 입수했습니다의 CommandText = "COLUMNNAME ='읽지 않음 'AND 럼 이름 = TABLENAME FROM SELECT COUNT (*)"'이 작동하지만 24 시간 동안 게시 할 수없는 답변입니다. –

    답변

    0

    수정 24 시간 대기중인 질문이 있으므로 게시물에 추가했습니다. 필자가 작성한 클래스 파일에서 나중에 짧게 만들 것이지만 신속하고 간단한 수정을 발견했습니다. 사람들이 밖으로.

    객체 희미한 constring으로

    어둡게되는 SQLResult 문자열 =으로 희미한 dbcon는 "연결 문자열이 간다"로서도록 SqlConnection = 새도록 SqlConnection (constring)으로 희미한 SQL 뉴하는 SqlCommand dbcon.Open() sql.Connection = dbcon SQL.'& 세션 ("sessionvariable") & "" 이되는 SQLResult = sql.ExecuteScalar messagecountlbl.Text =되는 SQLResult

    0

    '읽지 않음'이라는 단어의 시작 부분에 작은 따옴표가 누락 된 것처럼 보입니다.

    ...& "' AND columnname = 'Unread'") 
    
    +0

    코멘트를 clyc에 게시했습니다. –

    4

    읽지 않은 부분에 따옴표가 누락되어 있지 않습니까?

    또한 SQL 인젝션에 취약합니다. 당신이하고있는 모든 행의 수를 얻는 경우 사용 매개 변수 대신

    또한

    ..., 당신의 코드는 과잉이다

    난 그냥 .... 당신이 comm2을 흐리게 발견하지만 어댑터는 통신을 사용

    귀하의 업데이트 된 질문은 내가 간 것입니다. 이것은 내가 당신의 초기 코드가 (메모리 사용량면에서) 과잉이라고 말한 이유입니다. 한 값에 대한 DataAdapters 및 DataTable의 효율성은 전혀 없습니다.

    당신은 결코해야

    Dim sqlresult As Object 
    Dim constring As String = "Connection string goes here" 
    Dim dbcon As SqlConnection = New SqlConnection(constring) 
    Dim sql As New SqlCommand 
    dbcon.Open() 
    sql.Connection = dbcon 
    sql.CommandText = "SELECT COUNT (*) FROM Tablename WHERE Columnname = 'Unread' AND columnname = @param" 
    sql.Parameters.AddWithValue("@param", Session("sessionvariable")) 
    
    sqlresult = sql.ExecuteScalar 
    messagecountlbl.Text = sqlresult 
    
    같은 SQL 문자열을 구축 (또는 적어도하지 않으려 고) 이유를, 다시 다음 ... 에 업데이트 된 코드를 변경 SQL 주입을 조회 할 수 있습니다

    +0

    맨 위의 코드는 내가 선택한 코드 영역을 호출하여 연결 문자열과 select 명령의 거대한 척을 작성하지 않고 지나치게 잔인하지 않은 코드 영역을 호출합니다. 견적을 추가하는 것이 똑같은 일 이었기 때문에 견적을 놓치지 않았습니다. –

    +0

    나는 내 코드를 업데이트하여 SQL 삽입에 취약하지 않고 사용하기가 더 쉬워졌습니다. 불행히도 여기에 게시 할 수 없습니다. –

    0

    첫 번째 라인은 comm2이라는 변수를 선언하지만 나중에 사용하지 않고 단순히 통신을 사용하고 있습니다.

    이를 염두에두고, 읽지 않은 부분의 인용 부호를 생략했다는 사실은 여전히 ​​관련이 있습니다.

    +0

    기밀 유지를 위해 일부 정보를 삭제할 때 실수로 두 정보를 삭제했습니다. 제가 지금 고치고있는 따옴표와 같습니다. –

    관련 문제