因此,我試圖使用nhibernate來調用存儲過程來保存圖像。我的問題是,查詢失敗,此錯誤:帶有byte []參數的NHibernate ISQLQuery拋出錯誤
The length of the byte[] value exceeds the length configured in the mapping/parameter.
這裏就是我附上我的參數給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();
}
在數據庫中,我的參數的類型是varbinary(max)
,我試圖在「字節[]」發送的數據。
我試過使用特定的SetBinary
,但這失敗了。所有其他數據類型似乎都在工作。
我也嘗試了query.SetParameter<byte[]>(parameter.Key, (byte[])parameter.Value);
與相同的錯誤。
非常感謝您對這個這樣
。一直在尋找幾個小時,看着映射,但這不適用於Session.CreateSqlQuery。我只是使用了NHibernate.Type.TypeFactory.GetBinaryType(int.MaxValue),而不是獲取字節數組的長度。 –