gpt4 book ai didi

c# - 无法使用企业库从 SQL 数据库获取字节数组

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:14 26 4
gpt4 key购买 nike

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

我已经尝试研究它,但大多数帖子都使用阅读器,而我的项目不允许使用该方法。

我的获取方法:

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;
}

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

最佳答案

我已经有一段时间没有这样做了,但如果我没记错的话,一种更简单的方法是使用 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
}

关于c# - 无法使用企业库从 SQL 数据库获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57279360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com