Sin*_*tic 0 c# sql-server stored-procedures active-directory
我有一个存储过程使用链接服务器(ADSI)连接到活动目录.它接受一个字符串/ varchar guid,然后将用户的thumbnailPhoto属性从活动目录中返回.我试图从C#代码调用此过程,但它一直返回null.我试图确保传递的guid是正确的,所以从调试,我抓住guid被传递到参数然后尝试使用它来管理工作室中的sproc.结果很好,但是当我从我的应用程序中执行它时,我得到null.这是代码:
存储过程:
ALTER PROC [dbo].[sp_GetPhotoFromADSI]
@GUID varchar(100)
AS
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRAN
DECLARE @sql NVARCHAR(600)
SET @sql=N'SELECT thumbnailPhoto FROM OPENQUERY(ADSI,
''SELECT thumbnailPhoto
FROM ''''LDAP://<GUID=' + @GUID + '>''''
WHERE objectCategory = ''''Person'''' AND objectClass = ''''user'''''')'
EXEC SP_EXECUTESQL @sql
COMMIT
Run Code Online (Sandbox Code Playgroud)
C#:
private byte[] GetUserPhotoByGuid(Guid userNativeGuid)
{
//dont judge me for not abstracting this
var connString = "connectionStringCrap;";
byte[] photo = null;
using (var conn = new SqlConnection(connString))
{
try
{
string guidString = userNativeGuid.ToString();
//var realGuid = Guid.Parse(userNativeGuid);
using (var comm = new SqlCommand("sp_GetPhotoFromADSI", conn))
{
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@GUID", guidString);
var returnParameter = comm.Parameters.Add("@Output", SqlDbType.Binary);
returnParameter.Direction = ParameterDirection.ReturnValue;
conn.Open();
comm.ExecuteScalar();
photo = returnParameter.Value as byte[];
return photo;
}
}
catch (Exception)
{
throw;
}
finally
{
conn.Close();
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
该值将返回ExecuteScalar()
.
Byte[] photo = (Byte[])comm.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1864 次 |
最近记录: |