【发布时间】:2015-10-06 09:46:41
【问题描述】:
我期望 SQL Server 2008 中的插入语句有两个输出 ID。我相信我在初始化 AddParam 时做错了,因为它没有插入数据。存储过程本身,没有参数的代码也经过测试并且可以正常工作。
存储过程
USE [mydb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[p_assessment_dfn_statementAnswer_insert]
@StatementID AS bigint,
@StaffID AS int,
@AssessmentID As bigint,
@StatementText AS nvarchar(MAX),
@StatementDate AS Date,
@StatementAnswerID AS bigint OUTPUT,
--
@SignatureCheck AS bit,
@SignatureDate AS Date,
@ElectronicSignatureID AS bigint OUTPUT
AS
SET NOCOUNT ON
SET XACT_ABORT ON
-- local variables
DECLARE @l_object AS SYSNAME = OBJECT_NAME(@@PROCID)
,@l_error_msg AS NVARCHAR(2000)
BEGIN TRY
BEGIN TRAN
INSERT INTO [adb_TestDb].[dbo].[Assessment_Statement_Answer]
([StatementID],[StaffID],[AssessmentID],[StatementText],[Date])
VALUES (@StatementID, @StaffID, @AssessmentID, @StatementText, @StatementDate)
SET @StatementAnswerID = @@IDENTITY;
IF(@StatementAnswerID>0)
BEGIN
INSERT INTO [adb_TestDb].[dbo].[Assessment_ElectronicSignature]([AssessmentID],[ElectronicSignatureCheck],[SignatureDateAndTime])
VALUES (@AssessmentID, @SignatureCheck,@SignatureDate)
SET @ElectronicSignatureID = @@IDENTITY;
END
IF(@ElectronicSignatureID>0)
BEGIN
INSERT INTO [adb_TestDb].[dbo].[AssessorSignature]([AssessmentElectronicSignatureID],[StatementAnswerID],[AssessorID])
VALUES(@ElectronicSignatureID, @StatementAnswerID, @AssessmentID)
END
COMMIT TRAN
END TRY
BEGIN CATCH
-- rollback any open/uncomitted transactions
IF XACT_STATE() IN ( -1, 1) ROLLBACK TRANSACTION
-- return an error containing the object, error number and error description
SELECT @l_error_msg = 'Error number : ' + CAST(ERROR_NUMBER()AS VARCHAR) + '. ' + ERROR_MESSAGE()
RAISERROR (@l_error_msg,16,1)
END CATCH
视图模型
public class AssessmentStatementAnswerViewModel
{
public AssessmentStatementAnswerViewModel() { }
public long StatementAnswerID { get; set; }
public long StatementID { get; set; }
public int StaffID { get; set; }
public long AssessmentID { get; set; }
public string StatementText { get; set; }
public DateTime Date { get; set; }
public string SubmitStatus { get; set; }
//
public long AssessmentElectronicSignatureID { get; set; }
public bool ElectronicSignatureCheck { get; set; }
public DateTime SignatureDateAndTime { get; set; }
}
我需要帮助的 C# 类
private static long InsertStatementAnswer_DF_P(ADB.Model.AssessmentStatementAnswerViewModel assessmentAnswerObj, MSSQL sql)
{
bool killConnection = Utils.getConnection(ref sql);
long returnValue = 0;
try
{
sql.SetSProc("[dbo].[p_assessment_dfn_statementAnswer_insert]");
sql.AddParam("@StatementID", assessmentAnswerObj.StatementID);
sql.AddParam("@StaffID", assessmentAnswerObj.StaffID);
sql.AddParam("@AssessmentID", assessmentAnswerObj.AssessmentID);
sql.AddParam("@StatementText", assessmentAnswerObj.StatementText);
sql.AddParam("@StatementDate", assessmentAnswerObj.Date);
sql.AddParam("@SignatureCheck", assessmentAnswerObj.ElectronicSignatureCheck);
sql.AddParam("@SignatureDate", assessmentAnswerObj.SignatureDateAndTime);
sql.AddOutputParam("@StatementAnswerID", SqlDbType.BigInt, 0);
sql.AddOutputParam("@ElectronicSignatureID", SqlDbType.BigInt, 0);
sql.ExecuteNonQuery();
}
finally
{
if (killConnection)
sql.Dispose();
}
return returnValue;
}
【问题讨论】:
-
您是否收到错误消息?
标签: c# sql-server-2008 stored-procedures webforms