ALTER PROCEDURE dbo.SP_InsertTicket
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
declare @i as numeric
exec SP_InsertTicket 'asd','cd@y.com','232323','dasasd','sdasdas','01-jan-2010',@i output,'sdas','sdasd','02-jan-2010'
select @i*/
@Client_FullName varchar(30),
@Client_EmailAdd varchar(50),
@Client_Telephn varchar(15),
@Ticket_Subject varchar(50),
@Ticket_Source varchar(15),
@Ticket_CreateDate Datetime,
@Ticket_Id integer output,
@Que_Message varchar(100),
@Que_Attachment varchar(max),
@Que_UpdateDate Datetime
AS
declare @TickID integer;
/* SET NOCOUNT ON */
BEGIN
INSERT INTO tbl_Ticket (Client_FullName,Client_EmailAdd,Client_Telephn,Ticket_Subject,Ticket_Source,Ticket_CreateDate)
VALUES (@Client_FullName, @Client_EmailAdd ,@Client_Telephn,@Ticket_Subject,@Ticket_Source,@Ticket_CreateDate)
Select @TickID = MAX(Ticket_Id) from tbl_Ticket
set @Ticket_Id=@TickID
INSERT INTO tbl_TicketQuestion (Ticket_Id,Que_Message,Que_Attachment,Que_UpdateDate)
VALUES (@TickID,@Que_Message,@Que_Attachment,@Que_UpdateDate)
END
RETURN这是我的存储过程,在这个过程中,我需要返回Ticket_Id才能通过电子邮件应用程序发送它,它插入的记录很好,不能在DAL中恢复值,下面是执行存储过程的代码,它返回值。
public class cls_DAL
{
public cls_DAL()
{
//
// TODO: Add constructor logic here
//
}
static string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString.ToString();
SqlConnection con = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
public int insert_NewTicket(string fullname, string emailadd, string telephone, string subject, string source, DateTime date,string Message, string attachment, DateTime updatedate)
{
try
{
con.Open();
cmd = new SqlCommand("SP_InsertTicket", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Client_FullName", fullname);
cmd.Parameters.AddWithValue("@Client_EmailAdd", emailadd);
cmd.Parameters.AddWithValue("@Client_Telephn",telephone);
cmd.Parameters.AddWithValue("@Ticket_Subject", subject);
cmd.Parameters.AddWithValue("@Ticket_Source",source);
cmd.Parameters.AddWithValue("@Ticket_CreateDate",date);
cmd.Parameters.AddWithValue("@Ticket_Id",0);
cmd.Parameters.AddWithValue("@Que_Message", Message);
cmd.Parameters.AddWithValue("@Que_Attachment", attachment);
cmd.Parameters.AddWithValue("@Que_UpdateDate",updatedate);
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.InputOutput;
return cmd.ExecuteNonQuery();
int i = (int)cmd.Parameters["@Ticket_Id"].Value;
}
catch
{
throw;
}
finally
{
cmd.Dispose();
con.Close();
con.Dispose();
}
}
}发布于 2012-04-05 11:39:56
只是猜测,不确定。您可以尝试以下几种方法:
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.InputOutput;至
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.Output;发布于 2012-04-05 11:43:51
无法编译的代码将无法到达
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.InputOutput; cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@Ticket_Id"].Value; 或者@Matt的解决方案..。
演员阵容也不确定..。
在多用户场景中,ticketid将进行竞赛。想想能做什么(威尔!)如果你同时运行其中的两个
应该在事务中包装。
而且你也不需要Max,也可以使用Scope_Identity
发布于 2012-04-05 11:39:21
可以在Insert语句之后运行Select Scope_Identity()。然后在DAL方法中使用return Convert.ToInt32(cmd.ExecuteScalar())
https://stackoverflow.com/questions/10027774
复制相似问题