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();
}
}
}
答案 0 :(得分:1)
这只是猜测,不确定。您可以尝试以下方法:
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.InputOutput;
TO
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.Output;
答案 1 :(得分:1)
那将无法编译您将获得无法访问的代码
cmd.Parameters["@Ticket_Id"].Direction = ParameterDirection.InputOutput; cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@Ticket_Id"].Value;
或@ Matt的解决方案......
那个演员也是如此......
在多用户场景中,ticketid将参加比赛。 想想如果你同时运行其中两个,会发生什么(将会!!!)
应该包含在交易中。
你也不需要Max,使用Scope_Identity
答案 2 :(得分:0)
您可以在Insert语句后运行Select Scope_Identity()
。然后在您的DAL方法return Convert.ToInt32(cmd.ExecuteScalar())
答案 3 :(得分:0)
改变这个:
return cmd.ExecuteNonQuery();
到
Int i = cmd.ExecuteScalar();
如果您只是从该过程返回一个整数。
ExecuteNonQuery()
不是您要在此处使用的方法