반환 값을 사용하여 스토어드 프로시저를 호출합니다.
C# 윈도 어플리케이션에서 스토어드 프로시저를 호출하려고 합니다.저장 프로시저는 SQL Server 2008의 로컬 인스턴스에서 실행되고 있습니다.저장 프로시저를 호출할 수 있지만 저장 프로시저에서 값을 다시 가져올 수 없습니다.이 저장 프로시저는 시퀀스의 다음 번호를 반환합니다.온라인으로 조사를 실시했습니다만, 지금까지 본 사이트에서는, 이 솔루션이 유효하다고 지적하고 있습니다.
저장 프로시저 코드:
ALTER procedure [dbo].[usp_GetNewSeqVal]
@SeqName nvarchar(255)
as
begin
declare @NewSeqVal int
set NOCOUNT ON
update AllSequences
set @NewSeqVal = CurrVal = CurrVal+Incr
where SeqName = @SeqName
if @@rowcount = 0 begin
print 'Sequence does not exist'
return
end
return @NewSeqVal
end
저장 프로시저를 호출하는 코드:
SqlConnection conn = new SqlConnection(getConnectionString());
conn.Open();
SqlCommand cmd = new SqlCommand(parameterStatement.getQuery(), conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param = cmd.Parameters.Add("@SeqName", SqlDbType.NVarChar);
param.Direction = ParameterDirection.Input;
param.Value = "SeqName";
SqlDataReader reader = cmd.ExecuteReader();
또, 이 기능을 사용해 본 적이 있습니다.DataSet
같은 결과로 반환값을 가져옵니다.저장 프로시저에서 반환값을 얻으려면 무엇이 부족합니까?더 필요한 정보가 있으면 알려주세요.
를 추가해야 합니다.ReturnValue
명령어에 대한 -direction 파라미터:
using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = parameterStatement.getQuery();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");
// @ReturnVal could be any name
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
}
파라미터의 방향 설정ParameterDirection.ReturnValue
명령어SqlCommand
변수를 변수로 선언하고 저장 프로시저의 반환 값을 변수에 할당합니다(exec @ReturnValue = spMyProcedure...
SQL에 쓰는 것과 똑같습니다.
오래된 건 알지만 구글에서 우연히 발견했어요.
저장 프로시저에 반환 값이 있는 경우 출력 파라미터를 사용하지 않고 "Return 1"이라고 입력합니다.
다음 작업을 수행할 수 있습니다. "@RETURN_VALUE"는 모든 명령 개체에 자동으로 추가됩니다.명시적으로 추가할 필요 없음
cmd.ExecuteNonQuery();
rtn = (int)cmd.Parameters["@RETURN_VALUE"].Value;
컴퓨터에 설치된 EnterpriseLibrary 버전에는 다른 파라미터가 있습니다.이것은 효과가 있었습니다.
SqlParameter retval = new SqlParameter("@ReturnValue", System.Data.SqlDbType.Int);
retval.Direction = System.Data.ParameterDirection.ReturnValue;
cmd.Parameters.Add(retval);
db.ExecuteNonQuery(cmd);
object o = cmd.Parameters["@ReturnValue"].Value;
SP 콜에서 예상 파라미터가 포함되지 않은 오류를 반환하는 것과 같은 문제가 발생했습니다.내 코드는 다음과 같았다.
저장 프로시저:
@결과 int 출력
그리고 C#:
SqlParameter result = cmd.Parameters.Add(new SqlParameter("@Result", DbType.Int32)); result.Direction = ParameterDirection.ReturnValue;
트러블 슈팅에서는 스토어드 프로시저가 실제로는 「InputOutput」의 방향을 찾고 있는 것을 깨달았습니다.따라서 다음 변경으로 문제가 해결되었습니다.
r
Result.Direction = ParameterDirection.입력 출력
다음은 절차에서 단일 값을 반환하는 매우 짧은 예입니다.
SQL:
CREATE PROCEDURE [dbo].[MakeDouble] @InpVal int AS BEGIN
SELECT @InpVal * 2; RETURN 0;
END
C# 코드:
int inpVal = 11;
string retVal = "?";
using (var sqlCon = new SqlConnection(
"Data Source = . ; Initial Catalog = SampleDb; Integrated Security = True;"))
{
sqlCon.Open();
retVal = new SqlCommand("Exec dbo.MakeDouble " + inpVal + ";",
sqlCon).ExecuteScalar().ToString();
sqlCon.Close();
}
Debug.Print(inpVal + " * 2 = " + retVal);
//> 11 * 2 = 22
ExecuteScalar();
동작하지만 출력 파라미터가 뛰어난 솔루션이 됩니다.
출력 파라미터를 사용해 볼 수 있습니다.http://msdn.microsoft.com/en-us/library/ms378108.aspx
또는 표준 ADO가 아닌 EnterpriseLibrary를 사용하는 경우.네트워크...
Database db = DatabaseFactory.CreateDatabase();
using (DbCommand cmd = db.GetStoredProcCommand("usp_GetNewSeqVal"))
{
db.AddInParameter(cmd, "SeqName", DbType.String, "SeqNameValue");
db.AddParameter(cmd, "RetVal", DbType.Int32, ParameterDirection.ReturnValue, null, DataRowVersion.Default, null);
db.ExecuteNonQuery(cmd);
var result = (int)cmd.Parameters["RetVal"].Value;
}
다른 하나는 닫았군요.그래서 기본적으로 여기 제 암호의 대략적인 내용이 있습니다.문자열 cmd 코멘트가 누락된 것 같습니다.예를 들어, 스토어 프로시저가 call인 경우:DBO. 테스트.cmd="DBO.test"라고 써야 합니다.그러면 명령어 타입을 스토어 프로시저와 동일하게 하여 blah blah blah
Connection.open();
String cmd="DBO.test"; //the command
Sqlcommand mycommand;
언급URL : https://stackoverflow.com/questions/6210027/calling-stored-procedure-with-return-value
'programing' 카테고리의 다른 글
NSUserDefaults - 키가 존재하는지 확인하는 방법 (0) | 2023.04.18 |
---|---|
앱스토어 앱 링크 방법 (0) | 2023.04.18 |
PowerShell 복사 스크립트에서 여러 문자열을 적절하게 필터링하는 방법 (0) | 2023.04.13 |
NSInterger의 NSLog/printf 지정자? (0) | 2023.04.13 |
Ruby에서 문자열에 하위 문자열이 포함되어 있는지 확인하는 방법 (0) | 2023.04.13 |