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
4 svar · 667 visningar · startad av Sanji
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
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
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?
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
fick det att fungera nu :) tack!