다음 문제를 처리하고 있습니다. DataGridView에 내 데이터를 표시하기 위해 MSSQL 저장 프로 시저를 사용합니다. 업데이트 및 삽입 명령이 작동하지만 한 가지 문제가 있습니다.SP로 업데이트 한 후 레코드를 새로 고치는 방법
새 행을 삽입하면 자동으로 번호가 지정된 기본 키가 DataAdaptar로 다시 전송되지 않습니다. 따라서 삽입은 데이터베이스에서 성공하지만 PK는 DataGridView에 공백으로 남습니다. 나는 allready 같은 일부 코드 시도 : 데이터 어댑터에
private void _rowUpdated(object sender, SqlRowUpdatedEventArgs e)
{
if (e.Status == UpdateStatus.Continue && e.StatementType == StatementType.Insert)
{
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT @@IDENTITY FROM " + e.Row.Table.TableName;
DataRow r = dt.Rows[dt.Rows.Count - 1];
r.ItemArray[0] = cmd.ExecuteScalar();
//r.SetModified(); --> err?
r.AcceptChanges();
}
}
,하지만 아무것도 작동하는 것 같다 없습니다. 모든 SQL 명령이 정상적으로 작동합니다.
DataGridView에서 데이터를 새로 고칠 때마다 모든 것이 완벽합니다. 그러나이 문제는 정렬 순서와 열 너비가 조정된다는 것입니다. 그리고 그것은 내가 원하는 것이 아닙니다.
누군가가이 문제를 해결할 수 있습니까?
솔루션을 기대합니다!
감사합니다.
안녕하세요, 는이 같은 코드 테스트 : cmd.CommandText이 = "('+ e.Row.Table.TableName +"IDENT_CURRENT) "을 선택"'; var res = cmd.ExecuteScalar(); Debug.WriteLine ("RESULTS :"+ res); 내 쿼리와 같은 결과가 나타납니다. 하지만 당신이 옳아,이 SQL 함수를 사용하는 것이 낫다. 그러나 문제는 여전히 존재합니다 : PK 필드가 비어 있습니다. 나는 datarow 함수에 저장되지 않습니다 같아요. 그러나 내가 사용하는 모든 액션 (Update, AcceptChanges, ..)은 무한 루프를 초래합니다. 어떤 제안? – VeeWee
@VeeWee : 왜 cmd에 중단 점을 넣지 마십시오.ExecuteScalar()를 호출하고 값을 확인합니다. VS.Net의 직접 창 (Alt + Ctrl + I)에서 결과를 확인하십시오. 이'cmd.ExecuteScalar()'를 붙여 넣기 만하면 무엇을 얻고 있는지 확인하십시오. SQL Server에서 동일한 쿼리를 시도하십시오. 그것은 당신에게 원하는 결과를 줄 것이다. 나는 단절된 아키텍처에서 작업하는 것에 대해 많은 것을 말할 수 없으므로 이와 관련된 문제에 대해 많은 도움을줍니다. –
@VeeWee :이 이벤트는 루프에서 실행중인 row_updated()입니까? 이것이 ** ** "내가 사용하는 모든 액션 (Update, AcceptChanges, ..)은 무한 루프를 발생시킨다"** –