ASP.NET/C# 코드에서 액세스하는 SQL Server 2005 데이터베이스에 저장 프로 시저가 있습니다. 저장 프로 시저에 대한저장 프로 시저가 실행되지만 데이터를 업데이트하지 않습니다.
매개 변수는 일반적인 방식으로 정의됩니다
Try
{
SqlCommand cmd = new SqlCommand("mystoredprocedure",myConnection)
cmd.Parameters.Add(new SqlParameter("@p1"), SqlDbType.Int))
cmd.Parameters["@p1"].Value = myvalue (usually form inputs)
.
.
.
myConnection.Open()
cmd.ExecuteNonQuery()
}
catch (Exception xx)
{
lblError.Text = xx.Message;
}
finally
{
myConnection.Close();
}
문제는 저장 프로 시저가 오류를 throw하지 않습니다하지만, 내 데이터 결코 업데이트입니다. SQL Server에서 프로 시저를 확인한 후 SQL Server를 통해 직접 호출하면 proc이 업데이트합니다.
오랫동안 정상적으로 작동 했으므로이 머리카락을 찢어 버리고 작동을 멈췄습니다. 일반적인 범인을 확인했습니다 (db 연결이 올바른 데이터베이스를 가리키고 있으며 프로 시저가 SQL Server에서 제대로 작동하는 것으로 보입니다. 내가 만든 몇 가지 새로운 매개 변수를 주석으로 처리했습니다)
이걸 일으킬 수 있니? 동일한 절차가 SQL Server에서는 작동하지만 코드를 통해 오류가 발생하지 않는 것은 이상한 일입니다. (확실히, 내가 저장 프로 시저의 반환 값을 넣어 반환 값은 내가 롤백 아니에요 표시) 저장 프로 시저에 대한
편집
코드 :
BEGIN TRANSACTION
--get count
update dbo.myTable set
[email protected],
[email protected],
.
.
.
WHERE [email protected]
SET @Err = @@ERROR
--if error rollback transaction
IF @Err <> 0
BEGIN
ROLLBACK TRANSACTION
GOTO ErrorHandler
END
Select @ReturnCode = 1
COMMIT TRANSACTION
RETURN
ErrorHandler:
--unknown error
Select @ReturnCode = 0
RAISERROR (@Err, 16, 1) WITH LOG
RETURN -100
편집
나는 cmd.ExecuteNonQuery를 구문 분석 할 때 결과가 -1이됩니다. 여전히 C# 코드가이 작업을 수행하지만 오류를 던지지 않는 이유를 파악하려고합니다. ExecuteNonQuery는 저장 프로 시저의 영향을받는 행 수를 반환해야합니까?
편집
내 역사를 다시 회전 속도를 올린다 몇 계단 한 TFS를 사용 - 쿼리를 깨고 내가 최근에 추가 된 추가 필드가처럼 보인다. 그 필드를 주석 처리하고 sproc을 호출하면 잘 동작합니다.
왜 그런지 모르지만 - 단지 varchar (255) 필드입니다. 이 데이터베이스에는 비슷한 방식으로 설정되는 많은 다른 필드가 있습니다. 이것이 왜 문제가 되는가에 대한 어떤 생각?
EDIT SQL 프로파일 러를 사용하면 실행 및 커밋 문을 볼 수 있지만 여전히 데이터가 업데이트되지 않습니다. 나는 sproc을 쓰레기로 다시 채울 필요가 있는지 궁금하네요?
SqlCommand cmd;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
또는 당신은 아마 사용 :
SQL 프로파일 러는 무엇이 있습니까? 전화는 무엇입니까? 매개 변수가 전송됩니까? – Pouki
거기에 거래가 있습니까 (아마도 'TransactionScope'를 통해)? 아마도 데이터베이스 * 파일 *에 대해 실행하고 빌드 할 때마다 bin/debug에서 복사본을 버리는가? –
SP 코드는 어디에 있습니까? 이 코드 주변에 주변 거래가 있습니까? – vittore