2011-10-13 2 views
0

테이블을 업데이트 한 후 잘못된 repsonse가 발생합니다. 내 RowUpdating 이벤트에서 테이블을 업데이트하는 SP를 호출하는 업데이트 매개 변수를 빌드하는 다음 코드가 있습니다. 나는 틀린 일을해야 할 것이지만 모든 것이 잘 돌아 간다. 내 rowsAffected 변수는 업데이트 후 1을보고하지만 테이블은 데이터를 가져 오지 않습니다.asp.net 매개 변수 업데이트 보고서 1 행이 업데이트되었지만 테이블에 데이터가 추가되지 않았습니다.

다음은 RowUpdating 이벤트의 관련 코드입니다. 값은 매개 변수에도 올바르게 채워집니다. 여기

itemDataSource.ConnectionString = ConfigurationManager.ConnectionStrings("myConnString").ToString() 

itemDataSource.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure 
itemDataSource.UpdateCommand = "usp_updatePTT"     ' Call stored procedure 

    'Establishes value of Primary key and String sent to SP 
    itemDataSource.UpdateParameters.Add("ID", updateKey) 
    itemDataSource.UpdateParameters.Add("lang_String", updateString) 

    Dim rowsAffected As Integer = 0 
    rowsAffected = itemDataSource.Update() 

    GridView4.DataBind() 

@ID int, 
@lang_String nvarchar(1000) 

AS 
    /* SET NOCOUNT ON */ 

BEGIN 
    UPDATE  tblLangROOTptt 
    SET    lang_String = @lang_String 
    WHERE  (ID = @ID) 
END 

RETURN 

어떤 제안

은 ... 감사

UPDATE를 감상 할 수있다 ....는 SP입니다 : 나는이 작동 해결책을 발견했다. 업데이트 명령에 대한 원래의 데이터 소스에 나는 다음과 같은 .... 본질적으로

UpdateCommand="EXEC usp_updatePTTrootString @[email protected]_ID, @[email protected]_string" > 

은 SP를 호출하는 원래의 데이터 소스를 할 수 있습니다 추가 할 필요가 있었다. 참고 : 명령 유형은 생각할 수있는 것처럼 저장 프로 시저가 아닌 TEXT로 유지되어야합니다.

+0

@ marc11h 데이터베이스에있는 테이블 또는 데이터 바인딩 할 테이블을 선택하십시오. –

+1

executenonquery()를 사용하십시오. –

+0

테이블이 DB에 있습니다. 나는 executenonquery를 시도했으나 어느 것도 작동하지 않았다. – htm11h

답변

0

업데이트 : 작동중인 해결책을 발견했습니다. 업데이트 명령에 대한 원래의 데이터 소스에 나는 다음과 같은 .... 본질적으로

UpdateCommand="EXEC usp_updatePTTrootString @[email protected]_ID, @[email protected]_string" > 

은 SP를 호출하는 원래의 데이터 소스를 할 수 있습니다 추가 할 필요가 있었다. 참고 : 명령 유형은 생각할 수있는 것처럼 저장 프로 시저가 아닌 TEXT로 유지되어야합니다.

0

미리 업데이트 된 테이블 값을 사용하여 테이블을 다시 태블릿으로 만드는 것으로 보입니다. DataGrid로 전송 된 데이터의 값을 가져 오는 select 문을 다시 호출해야 할 수도 있습니다.

+0

그게 사실 일지 모르지만, 현재 나의 주요 관심사는 DB 테이블에 데이터를 가져 오는 것입니다. select stmt가 데이터 nevers가 DB 테이블에 다시 기록되면 좋지는 않습니다. 참고로, 나는 그리드 뷰로 지금 당장은 cercerned, 그냥 DB를 업데이 트해야합니다. – htm11h

0

테이블에 이미있는 값으로 업데이트 할 수 있습니까?

+0

아니요 Lang_String 필드는 시작할 Null입니다. – htm11h

+0

ID 필드가 문자열입니까? 그렇다면 후행 공백으로 인해 올바른 행이 검색되지 않을 수 있습니다. 레코드가 갱신되지 않아도 명령은 성공으로 리턴됩니다. –

+0

아니요 int입니다. – htm11h

0

나는 row_updated 메소드에서 너무 많이하는 것과 관련된 몇 가지 문제점이 있다고 생각한다.

row_Updated 인 경우 SQL 데이터 소스가 이미 업데이트 중임을 의미하므로 이전 업데이트 세트가 완료되기 전에 별도의 업데이트가 호출됩니다 (행과 열에 만 있음). 여러 행이 있다고 가정합니다.)

그런 다음 DataSource를 다시 업데이트하기 전에 데이터 소스에 연결된 Gridview를 바인딩합니다.

두 번째 업데이트를 수행 할 때 별도의 데이터 소스를 사용하는 것이 좋습니다. 예를 들어 : (당신은 크게 코드 숨김의 흐름을 변경하려는 경우가 아니면) 다시의 GridView 업데이트로

Sub MyGridView_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 
    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("myConnString").ToString()) 
    Dim cmd As New SqlCommand("usp_updatePPT") 
    cmd.Connection = conn 
    cmd.CommandType = CommandType.StoredProcedure 
    cmd.Parameters.AddWithValue("@ID", updateKey) 
    cmd.Parameters.AddWithValue("@lang_string", updateString) 
    Try 
     conn.Open() 
     Dim rdr As SqlDataReader = cmd.ExecuteReader() 
     Dim dt As New DataTable() 
     dt.Load(rdr, LoadOption.Upsert) 
     conn.Close() 
    Catch ex As Exception 
     If conn.State > 0 Then 
      conn.Close() 
     End If 
     'TODO: Your error handling logic here 
    End Try 
End Sub 

, 단지 페이지 새로 고침을한다.

+0

제안을 주셔서 감사합니다.이 루틴을 시도해 보겠습니다. 좋아, 그래도 빠른 업데이트. Gridview4는 두 번째 그리드이므로 실제로 쿼리를 생성 한 그리드가 아니라 업데이트를 시도하고 볼 수 있으므로 본질적으로 다른 데이터 소스를 사용하고 있습니다. 나는 RowUpdated 이벤트에 어떤 코드도 갖고 있지 않다. RowUpdated 이벤트가 아니라 RowUpdated 이벤트에서 작업하고 있습니다. – htm11h

관련 문제