将byte []作为参数传递给SQL Server存储过程

时间:2016-10-18 10:17:04

标签: c# sql sql-server stored-procedures

我有以下代码,我尝试将字节数组作为参数传递给存储过程。

DbCommand ac = new DbCommand(connIn);
ac.ParamAdd("p_id", jobId);
byte[] zippedAuditLog = ZipFile(auditLog);
ac.ParamAdd("p_audit_log", zippedAuditLog);
ac.ParamAdd("p_mod_user", userId);

ac.ExecuteStoredProc("pkg.audit_log_update");   

如果我调试C#代码,则会正确填充zippedAuditLog字节数组,但是在保存到数据库时,该值设置为0x1F,这只是一个空格。

数据库过程如下:

CREATE PROCEDURE job_pkg.audit_log_update
    @p_id        INT,       
    @p_audit_log VARBINARY(MAX),
    @p_mod_user  VARCHAR(60),
    @p_status    VARCHAR(60) OUTPUT
AS
BEGIN
    UPDATE t_job
    SET zipped_audit_log = @p_audit_log
    WHERE id = @p_id
END

非常感谢任何帮助。

修改

ParamAdd代码如下所示:

    public SqlParameter ParamAdd(string name, object val) {
        if (val == null)
            return command.Parameters.AddWithValue(name, DBNull.Value);
        else
            return command.Parameters.AddWithValue(name, val);
    }

0 个答案:

没有答案