簡體   English   中英

從存儲過程中獲取C#asp.net中的返回值(語法問題)

[英]Getting a Return Value in C# asp.net from a stored procedure (syntax issue)

我在嘗試為我的C#2008 asp.net代碼獲取正確的語法時遇到問題。 我需要從我的存儲過程中獲取返回值(Select @@ Identity)

我的C#代碼是:

        SqlConnection conn = new SqlConnection(strConn);
        string sql = "usp_ClientProfile_Header";
        SqlCommand cmdHeader = new SqlCommand(sql, conn);

        cmdHeader.CommandType = CommandType.StoredProcedure;

        cmdHeader.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@FName"].Value = txtFName.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@LastName", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@LName"].Value = txtLName.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@EmailAddress", SqlDbType.VarChar, 100));
        cmdHeader.Parameters["@Email"].Value = txtEMail.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@Address1", SqlDbType.VarChar, 255));
        cmdHeader.Parameters["@Address1"].Value = txtAddress1.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@City", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@City"].Value = txtCity.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@State", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@State"].Value = txtState.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@ZipCode", SqlDbType.VarChar, 12));
        cmdHeader.Parameters["@Postal_Code"].Value = txtZip.Text.Trim();

我的代碼中的下一行需要是“ ParameterDirection.ReturnValue ”,但我似乎無法使語法正確。

有任何想法嗎?

要捕獲RETURN VALUE(使用RETURN({number})語法由SQL返回),請使用:

cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

此外,您應該使用SCOPE_IDENTITY()而不是@@ IDENTITY

編輯:
所以你的sproc會做類似的事情:

DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)

並且您檢索該值的C#代碼將是:

int newId = cmdHeader.Parameters[@ReturnValue].value;

編輯2:
好吧,原始問題混淆了這個問題,因為“返回值”與您實際執行的操作不同,它返回單個列結果集。

因此, 請勿添加ReturnValue參數。 只需使用原始SqlCommand設置執行ExecuteScalar() ,如下所示:

int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());
SqlParameter parameterReturnValue = new SqlParameter("ReturnValue", SqlDbType.Int, 4);
parameterReturnValue.Direction = ParameterDirection.ReturnValue;
cmdHeader.Parameters.Add(parameterReturnValue);

//Execute your command
cmdHeader.ExecuteNonQuery();

//Get the return value
int returnvalue = (int)myCommand.Parameters["ReturnValue"].Value;

SQL存儲過程:

假設過程返回一些id / identity,如下所示

SET @ReturnValue= Scope_identity() return @ReturnValue

在C#我們可以

SqlParameter[] param = null; param = new SqlParameter[] { new SqlParameter("@idStudent",idStudent), new SqlParameter("","") // some empty parameters for return value }

//here we can update param with return type SqlParameter parOut = new SqlParameter("@ReturnValue", 0); parOut.Direction = ParameterDirection.Output; param[param.Length - 1] = parOut;

DataSet dsResult = con.executeSelectStoredProc("SP_NAME", param);

方向是在SqlParameter對象上設置的,對於您的示例,它應該類似於:

cmdHeader.Parameters["@Postal_Code"].Direction = ParameterDirection.ReturnValue;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM