Jos*_*osh 1 nhibernate bytearray fluent-nhibernate isqlquery
因此,我正在尝试使用nhibernate调用保存图像的存储过程。我的问题是查询失败,并显示以下错误:
byte []值的长度超过在映射/参数中配置的长度。
这是我将参数附加到的地方ISQLQuery。参数为Dictionary<string, object>。
public void Execute()
{
string sql = BuildSprocDefinition();
var query = Session.CreateSQLQuery(sql);
foreach (var parameter in Parameters)
{
if (parameter.Value is int)
query.SetParameter<int>(parameter.Key, (int)parameter.Value);
else if (parameter.Value is long)
query.SetParameter<long>(parameter.Key, (long)parameter.Value);
else if (parameter.Value is bool)
query.SetParameter<bool>(parameter.Key, (bool)parameter.Value);
else if (parameter.Value is byte[])
query.SetBinary(parameter.Key, (byte[])parameter.Value);
else
query.SetParameter(parameter.Key, parameter.Value);
}
using (var tx = Session.BeginTransaction())
{
query.ExecuteUpdate();
Session.Flush();
tx.Commit();
}
}
protected string BuildSprocDefinition()
{
StringBuilder sql = new StringBuilder(String.Format("exec {0} ", storedProcName));
foreach (var parameter in Parameters)
{
sql.Append(String.Format(":{0}, ", parameter.Key));
}
if (sql.ToString().EndsWith(", "))
{
sql = sql.Remove(sql.Length - 2, 2);
}
return sql.ToString();
}
Run Code Online (Sandbox Code Playgroud)
在数据库中,我的参数是type,varbinary(max)并且试图发送“ byte []”作为数据。
我尝试使用特定的SetBinary,但失败了。所有其他数据类型似乎都在起作用。
我也尝试query.SetParameter<byte[]>(parameter.Key, (byte[])parameter.Value);过相同的错误。
这是一个有点老的问题,但是我把我的答案写给了新的搜索者。
对于byte []参数,您可以这样指定长度
query.SetParameter(parameter.Key, parameter.Value, NHibernate.Type.TypeFactory.GetBinaryType(((byte[])parameter.Value).Length));
Run Code Online (Sandbox Code Playgroud)
您需要确保过程参数具有足够的长度
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |