Asp.net 将行插入多个表失败

Asp.net 将行插入多个表失败,asp.net,tsql,sql-server-2005,Asp.net,Tsql,Sql Server 2005,我有一个存储过程,可以同时将行插入多个表。存储过程中存在未触发的问题。你能看看这个语法吗?它是否正确,是否有效 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[InquiryPostReply] ( @Inquiry_id VARCHAR(50), @User_id VARCHAR(50), @Priority_type VARCHAR(25), @Status_na

我有一个存储过程,可以同时将行插入多个表。存储过程中存在未触发的问题。你能看看这个语法吗?它是否正确,是否有效

    set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InquiryPostReply]
(
    @Inquiry_id VARCHAR(50),
    @User_id VARCHAR(50),
    @Priority_type VARCHAR(25),
    @Status_name VARCHAR(50),
    @Inquiry_Content VARCHAR(1024),
    @Question_id NUMERIC(18,0),
    @user_name VARCHAR(50) OUT,
    @user_email VARCHAR(50) OUT,
    @NewId VARCHAR(50) OUT
)
AS
BEGIN
SET NOCOUNT ON;
declare @var1 int
declare @var2 int
declare @uniqueRef char(14)
set @uniqueRef = dbo.UniqueRefNum(rand(), rand(), rand(), rand())
set @var1= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Status_master] WHERE (Status_name=@Status_name))
set @var2= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Priority_master] WHERE (Priority_name=@Priority_type))
set @user_email=(SELECT [Email_Address] FROM [OmStocks].[dbo].[tbl_Inquiry_History] WHERE (Inquiry_id=@Inquiry_id))
set @user_name= (SELECT tbl_User_master.Full_Name FROM tbl_Inquiry_History INNER JOIN tbl_User_master ON tbl_Inquiry_History.User_id = tbl_User_master.Id WHERE(tbl_Inquiry_History.Inquiry_id=@Inquiry_id))
IF @var1 = '1'
BEGIN
  INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
           ([Id],[Inquiry_id],[User_id],[Priority_id],[Status_id],[body])
  VALUES
          (@uniqueRef,@Inquiry_id,@User_id,@var2,@var1,@Inquiry_Content)
  INSERT INTO [OmStocks].[dbo].[tbl_Answer]
           ([Question_id],[body],[Created_date])
  VALUES
           (@Question_id,@Inquiry_Content,CONVERT(DATETIME,GETDATE(), 101))
  UPDATE [OmStocks].[dbo].[tbl_Inquiry_History] 
  SET [Priority_id] = @var2,[Status_id] = @var1,[IsDisplay] = 1,[IsReplied] = 1,[TimeStamp] = CONVERT(DATETIME,GETDATE(), 101)
  WHERE (Inquiry_id=@Inquiry_id)
END
ELSE IF @var1 = '2'
BEGIN
  INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
           ([Id],[Inquiry_id],[User_id],[Priority_id],[Status_id],[body])
  VALUES
          (@uniqueRef,@Inquiry_id,@User_id,@var2,@var1,@Inquiry_Content)
  INSERT INTO [OmStocks].[dbo].[tbl_Answer]
           ([Question_id],[body],[Created_date])
  VALUES
           (@Question_id,@Inquiry_Content,CONVERT(DATETIME,GETDATE(), 101))
  UPDATE [OmStocks].[dbo].[tbl_Inquiry_History] 
  SET [Priority_id] = @var2,[Status_id] = @var1,[IsDisplay] = 1,[IsReplied] = 1,[TimeStamp] = CONVERT(DATETIME,GETDATE(), 101)
  WHERE (Inquiry_id=@Inquiry_id)
END
ELSE IF @var1 = '3'
BEGIN
  INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
    ([Id],[Inquiry_id],[User_id],[Priority_id],[Status_id],[body])
  VALUES
    (@uniqueRef,@Inquiry_id,@User_id,@var2,@var1,@Inquiry_Content)
  INSERT INTO [OmStocks].[dbo].[tbl_Answer]
           ([Question_id],[body],[Created_date])
  VALUES
           (@Question_id,@Inquiry_Content,CONVERT(DATETIME,GETDATE(), 101))
  UPDATE [OmStocks].[dbo].[tbl_Inquiry_History] 
  SET [Priority_id] = @var2,[Status_id] = @var1,[IsDisplay] = 0,[IsReplied] = 1,[TimeStamp] = CONVERT(DATETIME,GETDATE(), 101),[Activity_expire_time] = CONVERT(DATETIME,GETDATE(), 101)
  WHERE (Inquiry_id=@Inquiry_id)
END
SET @NewId = @uniqueRef
END
当我从ManagementStudio从代码隐藏处执行时,这个存储过程工作得很好,它成功地执行了,但没有将记录插入到表中。我在其中包含以下databasehelper.cs代码:

/// <summary>
    /// Adds answer in the [tbl_Inquiry_master] table.
    /// </summary>
    public static void AddPostReply(string inquiry_id,string user_id,string priority_type, string status_name, string inquiry_content,int question_id,out string reply_id,out string user_name,out string user_email)
    {
        using (SqlConnection con = Util.GetConnection())
        {
            con.Open();
            AddPostReply(con,inquiry_id,user_id,priority_type, status_name, inquiry_content, question_id,out reply_id,out user_name,out user_email);
        }
    }
    /// <summary>
    /// Adds answer in the [tbl_Inquiry_master] table.
    /// </summary>
    public static void AddPostReply(SqlConnection con, string inquiry_id, string user_id, string priority_type, string status_name, string inquiry_content, int question_id, out string reply_id, out string user_name, out string user_email)
    {
        AddPostReply(con, null, inquiry_id, user_id, priority_type, status_name, inquiry_content, question_id, out reply_id, out user_name, out user_email);
    }
    /// <summary>
    /// Adds answer in the [tbl_Inquiry_master] table.
    /// </summary>
    public static void AddPostReply(SqlConnection con, SqlTransaction trans, string inquiry_id, string user_id, string priority_type, string status_name, string inquiry_content, int question_id, out string reply_id, out string user_name, out string user_email)
    {
        using (SqlCommand cmd = new SqlCommand("[dbo].[InquiryPostReply]", con))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Inquiry_id", SqlDbType.VarChar).Value = inquiry_id;
            cmd.Parameters.Add("@User_id", SqlDbType.VarChar).Value = user_id;
            cmd.Parameters.Add("@Priority_type", SqlDbType.VarChar).Value = priority_type;
            cmd.Parameters.Add("@Status_name", SqlDbType.VarChar).Value = status_name;
            cmd.Parameters.Add("@Inquiry_Content", SqlDbType.VarChar).Value = inquiry_content;
            cmd.Parameters.Add("@Question_id", SqlDbType.Int).Value = question_id;
            cmd.Parameters.Add("@user_name", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@user_email", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@NewId", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
           if (trans != null)
            trans = con.BeginTransaction();
        cmd.ExecuteNonQuery();
        trans.Commit();
            user_name = Convert.ToString(cmd.Parameters["@user_name"].Value);
            user_email = Convert.ToString(cmd.Parameters["@user_email"].Value);
            reply_id = Convert.ToString(cmd.Parameters["@NewId"].Value);
        }
    }

请帮助我。

您需要在连接上打开事务,执行语句,然后提交这些更改

trans = con.BeginTransaction();
cmd.ExecuteNonQuery();
trans.Commit();

这对我来说似乎是个问题

IF @var1 = '1' AND  @var1 = '2'
这将永远返回错误


您需要按照dgarbacz的指示提交事务

i update my storage procedure,但这会导致错误,请参阅updated部分。您仍然没有提交事务。首先尝试删除该交易。不是你没有接受我的建议。我说首先尝试删除事务。这段代码对我没有帮助。你可以将这段代码实现到我的方法中。你在上面根据我的响应实现的代码应该可以工作。您收到的错误是从SQL Server冒出来的,这意味着您的数据正在提交,但存在冲突。您需要修改您的SQL过程。您的代码工作正常,但我的页面突然变为空白。在我的存储过程中就是这个问题。我不能给你答案,因为我不知道你在插入什么数据。由于第三次删除事务和测试时出现外键问题,您的插入或更新失败。错误在trans.Commit行上。首先确定问题是否在SP中。然后最有可能的是trans为null。您还应该在Commit行上测试null。现在,无需事务即可正常工作。
IF @var1 = '1' AND  @var1 = '2'