Как получить строковое значение из хранимой процедуры в C#?
Привет я использую хранимую процедуру
ALTER PROCEDURE [dbo].[SP_InsTicketSale] ( @TktDate date, @TktId nvarchar(50),@Name nvarchar(50), @Email nvarchar(50), @Mobile varchar(15),@TktStatus nvarchar(50) , @EmpId nvarchar(50),@TblLoc_ID varchar(3), @Promoid nvarchar(50), @TaxId nvarchar(50), @Grandtotal decimal(18,2),@subtotal decimal(18,2), @Details ITEMDATA1 Readonly, @id nvarchar(5) = NULL OUTPUT ) AS BEGIN if not exists(select * from Tbl_TicketSale where TktId= @TktId) Begin declare @IdTmp varchar(5) set @IdTmp = 00000 select @IdTmp = count(*) from Tbl_TicketSale set @IdTmp = @IdTmp + 1 set @TktId= Right(('00000' + @IdTmp),5) Begin Transaction INSERT INTO Tbl_Client(TktDate, TktId, Name, Email, Mobile) VALUES (@TktDate, @TktId,@Name, @Email, @Mobile) IF (@@ERROR <> 0) GOTO ERR_HANDLER INSERT INTO Tbl_TicketSale (TktId, EmpId, TktDate, TblLoc_ID, TaxId, Grandtotal,subtotal,TktStatus) VALUES (@TktId , @EmpId, @TktDate, @TblLoc_ID, @TaxId , @Grandtotal ,@subtotal,'Delivered') IF (@@ERROR <> 0) GOTO ERR_HANDLER --Temp Table INSERT INTO Tbl_TicketSaleChild (TktId, ActivityId, Qty, PoxtypeAC, ActPrice, Amt, TktSale_childdate) Select TktId=@TktId, tActivityId, tQty, tPoxtypeAC, tActPrice, tAmt, tTktSale_childdate from @Details ; IF (@@ERROR <> 0) GOTO ERR_HANDLER End Commit Transaction --RETURN 0 Return @TktId --select @TktId ERR_HANDLER: PRINT 'Unexpected error occurred!' ROLLBACK Transaction RETURN 1 END
и C# я использую
//public int InsetTicketSale() public void InsetTicketSale() { int i = 0; try { SqlDBHelper SqlDb = new SqlDBHelper(); SqlDb.CreateParameters("@TktDate", SqlDbType.Date, TktDate); SqlDb.CreateParameters("@TktId", SqlDbType.VarChar, TktId); SqlDb.CreateParameters("@Name", SqlDbType.VarChar, Name); SqlDb.CreateParameters("@Email", SqlDbType.VarChar, Email); SqlDb.CreateParameters("@Mobile", SqlDbType.VarChar, Mobile); SqlDb.CreateParameters("@EmpId", SqlDbType.VarChar, EmpId); SqlDb.CreateParameters("@TblLoc_ID", SqlDbType.VarChar, TblLoc_ID); SqlDb.CreateParameters("@Promoid", SqlDbType.VarChar, Promoid); SqlDb.CreateParameters("@TaxId", SqlDbType.VarChar, TaxId); SqlDb.CreateParameters("@Grandtotal", SqlDbType.Decimal, Grandtotal); SqlDb.CreateParameters("@subtotal", SqlDbType.Decimal, subtotal); SqlDb.CreateParameters("@Details", SqlDbType.Structured, Details); SqlDb.CreateParameters("@Servtax", SqlDbType.Decimal, Servtax); SqlDb.CreateParameters("@vat", SqlDbType.Decimal, vat); SqlDb.CreateParameters("@Tax3", SqlDbType.Decimal, Tax3); SqlDb.CreateParameters("@Servtaxp", SqlDbType.Decimal, Servtaxp); SqlDb.CreateParameters("@vatp", SqlDbType.Decimal, vatp); SqlDb.CreateParameters("@Tax3p", SqlDbType.Decimal, Tax3p); SqlDb.CreateParameters("@TktStatus", SqlDbType.VarChar, TktStatus); SqlDb.ProcedureName = "[SP_InsTicketSale]"; i = Convert.ToInt32(SqlDb.ExecuteNonQueryReturn()); } catch (Exception Excep) { throw new ApplicationException(Excep.Message); } // return i; }
Что я уже пробовал:
в C# я пробовал int type и executenonquery() он получал количество выполненных транзакций,
я получаю null как при использовании комбинации string и executescalar
Andy Lanng
Если вы используете ExecuteScalar, попробуйте Select @TktId / Select 1
Возвращаемые значения имеют несколько иное применение
ravikiran geddam
я благодаря вам я varhcar getrrin как выход, как '000010', как это