0
OUTPUT
매개 변수가있는 SQL Server 2012의 저장 프로 시저가 있습니다. 내가 코드에서 내 저장 프로 시저의 OUTPUT
가치를 어떻게저장 프로 시저에 의한 C#으로 SQL Server 출력 매개 변수 반환
Procedure or function 'DecryptCCode' expects parameter '@decryptedStr', which was not supplied.
: 나는 ExecuteNonQuery()
을 쳤을 때 나는이 지점에서 C#을 해독 함수를 호출 할 때, 난 항상 오류가? 감사.
저장 프로 시저 :
ALTER PROCEDURE [dbo].[DecryptCCode]
@decryptedStr nchar(5) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS
(SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = 'rfsdffsssdfsdfwerefeses'
IF NOT EXISTS
(SELECT * FROM sys.certificates WHERE name='ClientCert')
CREATE CERTIFICATE ClientCert
WITH SUBJECT = 'My ClientCode Certificate';
IF NOT EXISTS
(SELECT * FROM sys.symmetric_keys WHERE name='ClientCode_K1')
CREATE SYMMETRIC KEY ClientCode_K1
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE ClientCert;
OPEN SYMMETRIC KEY ClientCode_K1
DECRYPTION BY CERTIFICATE ClientCert;
SELECT
@decryptedStr = CONVERT(nvarchar, DecryptByKey(ClientCode, 1 , HashBytes('SHA1', CONVERT(varbinary, InstitutionID))))
FROM
dbo.lu_Institution
END
C# 코드
public string Decrypt()
{
using (var cn = new SqlConnection(((EntityConnection) ObjectContext.Connection).StoreConnection.ConnectionString))
{
try
{
var sqlcmd = new SqlCommand("EXEC [dbo].[DecryptCCode]", cn);
sqlcmd.Parameters.Add("@decryptedStr", SqlDbType.NChar, 5);
sqlcmd.Parameters["@decryptedStr"].Direction = ParameterDirection.Output;
cn.Open();
sqlcmd.ExecuteNonQuery();
cn.Close();
return sqlcmd.Parameters["@decryptedStr"].Value != DBNull.Value ? (string)sqlcmd.Parameters["@decryptedStr"].Value : string.Empty;
}
catch (Exception e)
{
cn.Close();
Console.WriteLine(e.Message);
return string.Empty;
}
}
}
감사합니다. Felipe! 다음과 같이 변경했습니다. var sqlcmd = new SqlCommand ("[dbo]. [DecryptCCode]", cn); sqlcmd.CommandType = CommandType.StoredProcedure; 줄을 추가했습니다. – user938455