반환 값으로 저장 프로 시저 호출
내 C # Windows 응용 프로그램에서 저장 프로 시저를 호출하려고합니다. 저장 프로 시저가 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
동일한 결과로 반환 값을 검색하기 위해를 사용했습니다 . 내 저장 프로 시저에서 반환 값을 얻으려면 무엇을 놓치고 있습니까? 더 많은 정보가 필요하면 알려주세요.
명령에 반환 매개 변수를 추가해야합니다.
using (SqlConnection conn = new SqlConnection(getConnectionString()))
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = parameterStatement.getQuery();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("SeqName", "SeqNameValue");
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
}
ExecuteScalar ()는 작동하지만 출력 매개 변수가 더 나은 솔루션이 될 것입니다.
나는 이것이 오래되었다는 것을 알고 있지만 Google에서 우연히 발견했습니다.
저장 프로 시저에 반환 값이있는 경우 출력 매개 변수를 사용하지 않고 "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;
출력 매개 변수를 사용해 볼 수 있습니다. http://msdn.microsoft.com/en-us/library/ms378108.aspx
예상 매개 변수가 포함되지 않았다는 오류를 반환하는 SP 호출과 비슷한 문제가 발생했습니다. 내 코드는 다음과 같습니다.
저장 프로 시저 :
@ 결과 int 출력
그리고 C # :
SqlParameter result = cmd.Parameters.Add(new SqlParameter("@Result", DbType.Int32)); result.Direction = ParameterDirection.ReturnValue;
In troubleshooting, I realized that the stored procedure was ACTUALLY looking for a direction of "InputOutput" so the following change fixed the problem.
r
Result.Direction = ParameterDirection.InputOutput;
Or if you're using EnterpriseLibrary rather than standard ADO.NET...
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;
}
I see the other one is closed. So basically here's the rough of my code. I think you are missing the string cmd comment. For example if my store procedure is call:DBO.Test. I would need to write cmd="DBO.test". Then do command type equal to store procedure, and 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
'code' 카테고리의 다른 글
Mac OS X의 Eclipse에서 파일로 이동하기위한 키보드 단축키는 무엇입니까? (0) | 2020.10.29 |
---|---|
Firebug에서 "sticky"상태로 마우스를 올릴 수 있습니까? (0) | 2020.10.29 |
명령 줄에 분기 계층 구조를 표시 하시겠습니까? (0) | 2020.10.29 |
CSS를 사용하여 요소를 맨 앞으로 가져 오기 (0) | 2020.10.29 |
노드 앱을 실행할 때 bcrypt 유효하지 않은 elf 헤더 (0) | 2020.10.29 |