여기 몇 달 동안 스토커로 일해 왔지만 이것은 제가 작성한 첫 번째 게시물입니다. 다행히도, 여기서 끝나지 않을 것이고 더 낙관적 인 미래의 게시물이 실제로 다른 사람에게 손을 뻗으려고 노력할 수도 있습니다. 나는이 공동체에 그토록 더 많은 것을 빚지고 있습니다.ASP.Net에서 SQL Server 2008 R2의 트랜잭션을 업데이트하지 못합니다.
지금 내가하려는 것은 간단하고 그 이유는 내 자신의 어리 석음 때문입니다. 그러나, 나는 여기에서 곤란하다.
SQL Server 2008 R2 데이터베이스와 상호 작용하는 ASP.Net 웹 사이트에서 작업하고 있습니다. 지금까지 모든 것이 괜찮아졌지만 행을 업데이트하는 것만으로는 효과가 없습니다. 이 사이트와 다른 사이트에서 코드 복사 및 붙여 넣기를 시도해 보았지만 항상 똑같습니다.
요약 : 업데이트 명령이 실행될 때 예외가 발생하지 않으며 (영향을받는 행의 정확한 수를 제공 할 수도 있음) 데이터베이스에 변경 사항이 실제로 적용되지 않습니다. 나는 이것을 시도했습니다
protected void btSubmit_Click(object sender, EventArgs e)
{
using (SqlConnection connection =
new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
string commandString = "UPDATE [impoundLotAlpha].[dbo].[Vehicle]" +
"SET [VehicleMake] = @VehicleMake" +
" WHERE [ComplaintID] = @ComplaintID";
using (SqlCommand command = new SqlCommand(commandString, connection))
{
SqlTransaction transaction = null;
try
{
command.Connection.Open();
transaction = connection.BeginTransaction(IsolationLevel.Serializable);
command.Transaction = transaction;
SqlParameter complaintID = new SqlParameter("@complaintID", SqlDbType.Int);
complaintID.Value = HttpContext.Current.Request.QueryString["complaintID"];
command.Parameters.Add(complaintID);
SqlParameter VehicleMake = new SqlParameter("@VehicleMake", SqlDbType.VarChar, 20);
VehicleMake.Value = tbVehicleMake.Text;
command.Parameters.Add(VehicleMake);
command.ExecuteNonQuery();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
finally
{
connection.Close();
}
}
}
}
: 여기
내 코드의 단순화 된 버전 (원래는 더 명령과 매개 변수 각각의 톤을 가지고 있지만,이 같은 때에도 작동하지 않음)입니다 "SqlTransaction"물건과 그것없이 아무것도 변경되지 않습니다. 또한 한 번에 여러 업데이트를 수행하기 때문에 단일 트랜잭션으로 작동하도록하고 싶습니다. System.Transactions 네임 스페이스 (CommittableTransaction, TransactionScope ...)에 포함 된 클래스를 사용하여이 작업을 수행 할 수 있음을 발견했습니다.
내가 찾을 수있는 모든 것을 시도했지만 다른 결과를 얻지 못했습니다. 다음과 같이
의 Web.config의 연결 문자열은 다음과 같습니다
<connectionStrings>
<add name="ApplicationServices"
connectionString="Data Source=localhost;Initial Catalog=ImpoundLotAlpha;Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
그래서, tldr; 버전 :
- 해당 레코드 업데이트 시도로 수행 한 실수는 무엇입니까? (비슷한 문제가있는 경우 아래에서 확인하십시오.)
- 여러 업데이트 명령을 단일 트랜잭션으로 수집하는 가장 좋은 방법은 무엇입니까?
어떤 종류의 도움이나 제안을 보내 주셔서 감사합니다.
편집 :
내가 단지 내 실수를 알아 내기 위해 나에게 5 분했다이 시간의 원인이 어제 잠을 부족한 것 같다.
분명히 업데이트가 제대로 작동했지만 텍스트 값이 Page_Load에서 덮어 쓰여지고 있음을 알 수 없었습니다. 웬일인지 나는이 부분을 해설했다 :
if (IsPostBack)
return;
두 번째 부분은 여전히 의미한다. 하지만이 질문을 내 질문에 대한 답변으로 게시하거나 그대로 유지해야합니까?
내가 예상했던 것보다 빠르다! 명령은 관리 스튜디오에서 완벽하게 작동합니다. 그리고 저장 프로 시저를 게시 한 직후 저장 프로 시저를 사용하여이 작업을 수행하기 시작했습니다. 그것은 제가 일하는 사람들이 절차의 큰 팬이 아니므로 그것을 피하려고했습니다. – Amarus