webForumDet fria alternativet

Stored Procedure med en output-parameter

4 svar · 665 visningar · startad av Sanji

SanjiMedlem sedan juli 2009356 inlägg
#1

Hej! Nu är det dags att lägga till en output-parameter till en av mina SP's.

Jag har lagt till en parameter, men jag har ett problem. När jag kör min SP så får jag felmeddelandet: "String[4]: egenskapen Size kan inte har storleken 0."

Hur ska jag veta vad som är string[4]?

Min SP:

ALTER PROCEDURE newinquiry
	@companyID uniqueidentifier,
	@responsibleuserID uniqueidentifier,
	@printdate datetime,
	@answerdate datetime,
	@output varchar(70) output
	AS
	BEGIN
	
	declare @notice int
	set @notice = 1
	

	declare @number int	
	SELECT @number = ISNULL(MAX(number), 0) FROM inquirydata WHERE companyID = @companyID
	SET @number += 1
	
	declare @inquiryID uniqueidentifier
	SELECT @inquiryID = newid()
	
	SET @output = @inquiryID

	insert into inquirydata(ID,companyID,number,printdate,answerdate,responsibleID)Values(@inquiryID,@companyID,@number,@printdate,@answerdate,@responsibleuserID)

	END

koden som anropar SP'n:

DateTime TenDaysLater = DateTime.Now.AddDays(10);
            SqlConnection conn = new SqlConnection("Data Source=.\\SQLExpress;Integrated Security=true; AttachDbFilename=|DataDirectory|\\databas.mdf;User Instance=true;");
            SqlCommand cmd = new SqlCommand("newinquiry", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@companyID", currentUser.CompanyID));
            cmd.Parameters.Add(new SqlParameter("@responsibleuserID", currentUser.ID));
            cmd.Parameters.Add(new SqlParameter("@printdate", DateTime.Now.ToShortDateString()));
            cmd.Parameters.Add(new SqlParameter("@answerdate", TenDaysLater.ToShortDateString()));

            SqlParameter retvalue = cmd.Parameters.Add("@output", SqlDbType.VarChar);
            retvalue.Direction = ParameterDirection.Output;
            
            conn.Open();
            cmd.ExecuteReader();
            string inqid = retvalue.Value.ToString();
            conn.Close();

så vad är det som försöker ge något en storlek på 0?

Mvh Sanji

@ndersMedlem sedan juni 200026 914 inlägg
#2

SQL Server kan bara hantera integers som output-parametrar från stored procedures - så det är mycket möjligt att det är det som genererar felet.

mvh

SanjiMedlem sedan juli 2009356 inlägg
#3

hmm... vad är det jag ska använda för att kunna få tillbaka id't då, eftersom den är en uniqueidentifier, och kan bara sparas som det eller string... finns det något annat sätt att få tillbaka värden än OUTPUT och RETURN value?

@ndersMedlem sedan juni 200026 914 inlägg
#4

Nej, du kan inte returnera den som output-parameter. Du måste skicka tillbaka den som ett "vanligt resultatset".

Du får inleda din procedur med "SET NOCOUNT ON", så du inte får tillbaka flera parallella resultatset, och avsluta med

SELECT @inquiryID

Du kan använda ExecuteScalar i din .NET-kod för att få ut värdet.

Mvh

SanjiMedlem sedan juli 2009356 inlägg
#5

fick det att fungera nu :) tack!

129 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)