예외발생상황
When batching, the command's UpdatedRowSource property value of UpdateRowSource.FirstReturnedRecord or UpdateRowSource.Both is invalid


배치 업데이트를 수행하기 위해 추가적으로 설정해야 할 작업은 추가/수정/삭제 커맨드의 UpdateRowSource 속성의 값을 None 혹은 OutputParameters 로 설정해야 한다는 것이다. UpdateRowSource 속성은 추가/수정/삭제의 업데이트 결과를 어떻게 받아올 것인가를 지정하는 속성으로써 UpdateRowSource 열거 타입인 None, OutputParameter, FirstReturnedRecord, Both 중 하나의 값으로 설정할 수 있으며 디폴트는 Both 이다. 하지만 배치 업데이트는 한 번에 여러 업데이트 커맨드를 데이터베이스에 제출하므로 중간에 결과셋을 받아 올 수 없다. 따라서 배치 업데이트에서는 None 이나 OutputParameter 값 만이 UpdateRowSource 속성에 유효한 값이 된다. [리스트 1]에서도 각 커맨드의 UpdateRowSource 속성의 값을 None으로 설정하고 있음을 알 수 있을 것이다.

 

                insertCommand.CommandText = "insert into h_gongje (gj_gubun, gj_code, gj_name, gj_bigo, gj_inuser, gj_indate)";
                insertCommand.CommandText += " Values(@gubun, @code, @name, @bigo, @inuser, @indate )";
                insertCommand.Parameters.Add("@gubun", SqlDbType.VarChar, 2, "gj_gubun");
                insertCommand.Parameters.Add("@code", SqlDbType.VarChar, 3, "gj_code");
                insertCommand.Parameters.Add("@name", SqlDbType.VarChar, 50, "gj_name");
                insertCommand.Parameters.Add("@bigo", SqlDbType.VarChar, 50, "gj_bigo");
                insertCommand.Parameters.Add("@inuser", SqlDbType.VarChar, 10, "gj_inuser");
                insertCommand.Parameters.Add("@indate", SqlDbType.VarChar, 8, "gj_indate");
----------------insertCommand.UpdatedRowSource = UpdateRowSource.None;

                SqlCommand updateCommand = new SqlCommand();
                updateCommand.CommandText = "update h_gongje set gj_name=@name, gj_bigo=@bigo, gj_inuser=@inuser, gj_indate=@indate ";
                updateCommand.CommandText += "where gj_gubun=@gubun and gj_code=@code";
                updateCommand.Parameters.Add("@gubun", SqlDbType.VarChar, 2, "gj_gubun");
                updateCommand.Parameters.Add("@code", SqlDbType.VarChar, 3, "gj_code");
                updateCommand.Parameters.Add("@name", SqlDbType.VarChar, 50, "gj_name");
                updateCommand.Parameters.Add("@bigo", SqlDbType.VarChar, 50, "gj_bigo");
                updateCommand.Parameters.Add("@inuser", SqlDbType.VarChar, 10, "gj_inuser");
                updateCommand.Parameters.Add("@indate", SqlDbType.VarChar, 8, "gj_indate");
----------------updateCommand.UpdatedRowSource = UpdateRowSource.None;

                SqlCommand deleteCommand = new SqlCommand();
                deleteCommand.CommandText = "delete from h_gongje where gj_gubun = @gubun and gj_code = @code";
                deleteCommand.Parameters.Add("@gubun", SqlDbType.VarChar, 2, "gj_gubun");
                deleteCommand.Parameters.Add("@code", SqlDbType.VarChar, 3, "gj_code");
----------------deleteCommand.UpdatedRowSource = UpdateRowSource.None;

신고