SQL Server와 상호 작용하는 쓰는 C# 프로그램이 있습니다. 저는 어리석게도 쿼리 문자열을 C# 프로그램에 하드 코딩하여 대신 서버의 저장 프로 시저로 변환하려고했습니다.ExecuteNonQuery()를 사용할 때 잘못된 반환 값
어떤 이유 때문에 특정 INSERT 문 (정상적으로 작동 했음)이 더 이상 작동하지 않아 그 이유를 알 수 없습니다. SQL 프로필러 추적을 실행하기까지 했으므로 구문이 완벽하게 작성되었음을 알 수 있습니다. 어쩌면 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니다.
저장 절차 : 이 SP는 많은 매개 변수를 가져 와서 테이블에 삽입합니다. 아주 간단합니다.
ALTER PROCEDURE [dbo].[usp_InsertNewChangeRequest]
@Requester INT,
@ChangeCreationDate DATETIME,
@ChangeName VARCHAR(200),
@ChangeDescription VARCHAR(1000),
@LastModifiedDate DATETIME,
@LastModifiedBy INT,
@AffectedArea INT,
@ImplementationPlan VARCHAR(MAX),
@BackoutPlan VARCHAR(MAX),
@RiskLevel TINYINT,
@ApprovalRequired BIT,
@IsApproved BIT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.ChangeRequests(Requester, ChangeCreationDate, ChangeName, ChangeDescription,
LastModifiedDate, LastModifiedBy, AffectedArea, ImplementationPlan, BackoutPlan,
RiskLevel, ApprovalRequired, IsApproved)
VALUES (@Requester, @ChangeCreationDate, @ChangeName, @ChangeDescription,
@LastModifiedDate, @LastModifiedBy, @AffectedArea, @ImplementationPlan, @BackoutPlan,
@RiskLevel, @ApprovalRequired, @IsApproved)
END
C#에서 내 코드는 단순히 다음 SP 매개 변수를 최상의 상태로 준비
는 nonquery 호출 :
public int InsertNewChange(int RequesterID, DateTime CreationDate, string ChangeName,
string ChangeDescription, DateTime LastModifiedDate,
int AffectedAreaID, string ImplementationPlan, string BackoutPlan,
int RiskLevel, int ApprovalRequired, int IsApproved)
{
int retval = 0;
// Create a command whose name is the stored procedure for inserts
SqlCommand command = new SqlCommand("usp_InsertNewChangeRequest", scConnection);
command.CommandType = CommandType.StoredProcedure;
// add the parameters to the stored procedure
command.Parameters.Add(new SqlParameter("@Requester", RequesterID));
command.Parameters.Add(new SqlParameter("@ChangeCreationDate", CreationDate));
command.Parameters.Add(new SqlParameter("@ChangeName", ChangeName));
command.Parameters.Add(new SqlParameter("@ChangeDescription", ChangeDescription));
command.Parameters.Add(new SqlParameter("@LastModifiedDate", LastModifiedDate));
command.Parameters.Add(new SqlParameter("@LastModifiedBy", RequesterID));
command.Parameters.Add(new SqlParameter("@AffectedArea", AffectedAreaID));
command.Parameters.Add(new SqlParameter("@ImplementationPlan", ImplementationPlan));
command.Parameters.Add(new SqlParameter("@BackoutPlan", BackoutPlan));
command.Parameters.Add(new SqlParameter("@RiskLevel", RiskLevel));
command.Parameters.Add(new SqlParameter("@ApprovalRequired", ApprovalRequired));
command.Parameters.Add(new SqlParameter("@IsApproved", IsApproved));
retval = command.ExecuteNonQuery();
return retval;
}
나는 끊임없이 반면 전, -1 반환 값을지고있어, 내가 SQL 텍스트 철자했다 전적으로 C#으로, 나는 1 행을 삽입, 1을 얻을 것이다.
격렬하게, 추적을 수행 할 때 SQL 프로파일 러에 오류가 표시되지 않습니다. 전달 된 문을 보여 주며 완벽하게 보입니다! 내가 잘라내어 그것을 Management Studio에 붙여 넣고 직접 손으로 실행할 때 잘 동작합니다.
exec usp_InsertNewChangeRequest @Requester=4,@ChangeCreationDate='2012-05-16 17:55:45',@ChangeName='test name',@ChangeDescription='test description',@LastModifiedDate='2012-05-16 17:56:01.937',@LastModifiedBy=4,@AffectedArea=2,@ImplementationPlan='test implem',@BackoutPlan='test backout',@RiskLevel=1,@ApprovalRequired=0,@IsApproved=0
누구에게 이것이 나에게 일어나는 이유를 알고 있습니까? 많이 감사합니다!
시도를 사용하는 것입니다. 다음 줄에 SqlCommand 명령 = 새 SqlCommand ("dbo.usp_InsertNewChangeRequest", scConnection); – atbebtg
@atbebtg : 아니요 ... 저장 프로 시저가 dbo없이 제대로 실행됩니다. –
행이 삽입됩니까? – pjp