【问题标题】:Can't Get Byte Array from SQL database using Enterprise Library无法使用企业库从 SQL 数据库获取字节数组
【发布时间】:2019-07-30 20:13:46
【问题描述】:

我正在使用 Enterprise Library 5.0.505 开发 Web API,但在从数据库中获取字节数组时遇到问题。我的插入语句使用 DbType.Binary 工作得很好,但是当我尝试使用 SqlStringAccessor 返回它时,它出现了 null。

我尝试过研究它,但大多数帖子都使用阅读器,而我的项目不允许这条路线。

我的 Get 方法:

public IEnumerable<User> UserSearch(string username)
        {
            string sql = "SELECT * FROM Users WHERE Username = @Username";

            var accessor = Database.CreateSqlStringAccessor<User>(sql, new NamedParameterMapper("@Username"));
            return accessor.Execute(username);
        }

我的用户类型的属性:

public int UserId { get; set; }
    public string Username { get; set; }
    public byte[] SaltedAndHashedPassword { get; set; }
    public byte[] Salt { get; set; }
    public bool LoggedIn { get; set; }

我的插入代码可以正常工作:

using (DbCommand cmd = Database.GetStoredProcCommand("[HeadCount_Ver01].[dbo].[AddUser]"))
            {
                Database.AddInParameter(cmd, "@Username", DbType.String, user.Username);
                Database.AddInParameter(cmd, "@SaltedAndHashedPassword", DbType.Binary, user.SaltedAndHashedPassword);
                Database.AddInParameter(cmd, "@Salt", DbType.Binary, user.Salt);

                return Database.ExecuteNonQuery(cmd) > 0;
            }

非常感谢任何帮助,谢谢。

【问题讨论】:

  • 为什么不用 EF 或 Dapper?

标签: c# sql enterprise-library


【解决方案1】:

我已经有一段时间没有这样做了,但如果我没记错的话,一种更简单的方法是使用 SqlDbType.Binary 作为输出参数,然后简单地通过查询提取值。

下面的代码未经测试,并使用此方法从另一个示例修改。从 SqlDbType.Binary 到字节数组的转换可能需要注意或修改,但应该非常接近。

using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("select @bytearray = dbcolumn from table", conn))
{
   SqlParameter outputByteParam = new SqlParameter("@bytearray", SqlDbType.Binary)
   { 
      Direction = ParameterDirection.Output 
   };

   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Add(outputByteParam);

   conn.Open();
   cmd.ExecuteNonQuery();

   byte[] result = outputByteParam.GetValueOrDefault<byte[]>();  // this line might need attention 
}

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多