webForumDet fria alternativet

Stored Procedure med en output-parameter

Databaser & SQL

4 svar · 667 visningar · startad av Sanji

Medlem sedan juli 2009355 inlägg
Frågan#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

Medlem sedan juni 200032 967 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

Medlem sedan juli 2009355 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?

Medlem sedan juni 200032 967 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

Medlem sedan juli 2009355 inlägg
#5

fick det att fungera nu :) tack!

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)