Informix(C#):如何正确设置/取消设置Blob字段?

| IBM Informix SDK: 陈述:
Update mytable set myblobcolumn = ? where myid = 1;
using (IfxConnection conn = GetIfxConnection())
using (IfxCommand cmd = new IfxCommand(updateSql, conn))
{
    var param = new IfxParameter(\"myblobcolumn\", IfxType.Blob) { IsNullable = true };
    cmd.Parameters.Add(param).Value = DBNull.Value

    cmd.ExecuteNonQuery(); //ERROR [HY000] [Informix .NET provider][Informix]Illegal attempt to use Text/Byte host variable.
}
如果我用另一个
IfxBlob
对象更新它,则可以正常工作,但是如果我用
DBNull.Value
对象更新,则会出现错误。有人知道如何使用参数化更新来“重置” blob列吗? 更新: 好的,我做了一些研究,并将事情减少了一些。 首先,我发现,如果在生成参数时显式声明the4ѭ,则.NET驱动程序在从数据库中的空值来回切换并具有实际的IfxBlob时,将无法转换DBNull.Value甚至Byte []数组在数据库中。基本上: 如果该列包含一个值,而我希望在其中存储null,则必须按如下所示强制转换参数:
UPDATE mytable SET myblobcolumn = ?::byte WHERE myid = 1;
。这使我可以正确地存储
DBNull.Value
的值。 如果该列包含一个空值,而我想在其中存储一个实际值,那么我必须按如下所示键入参数:
UPDATE mytable SET myblobcolumn = ?::blob WHERE myid = 1;
。这使我可以存储IfxBlob值。 现在,为避免所有这些,我将参数初始化简化为仅设置ParameterName属性:
var param = new IfxParameter { ParameterName = \"myblobcolumn\" }
(甚至只是为了能够从集合中引用它,仅此而已)。这使我可以保留我的语句,而不必强制转换参数。 所以...我剩下以下内容: 声明:
UPDATE mytable SET myblobcolumn = ? where myid = 1;
using (IfxConnection conn = GetIfxConnection())
using (IfxCommand cmd = new IfxCommand(updateSql, conn))
{
    var param = new IfxParameter { ParameterName = \"myblob\" }
    cmd.Parameters.Add(param);

    var value = GetSomeValue();

    if (value is Byte[])
        cmd.Paremeters[\"myblob\"].Value = GetIfxBlob(value);
    else
        cmd.Parameters[\"myblob\"].Value = DBNull.Value;

    //...
}
除我认为我在Informix .NET驱动程序(3.50.xC7)中发现一个与此漏洞类似的错误外,此方法工作正常。基本上,提供的链接指出,发现了一个错误,该错误不允许.NET驱动程序在执行插入操作时正确使用byte []数组创建blob。这已经得到修复,因为在执行INSERT语句时我可以按字面意思执行“ 11”。但是,当将byte []数组用于UPDATE语句时,驱动程序仍会给出异常。因此,我必须实际创建IfxBlob实例,并使用这些实例代替实际的byte []数组。 如果这不是驱动程序中的错误,则此问题需要保持开放状态,以了解设置/取消Blob字段的正确方法是使用byte []数组进行UPDATES。     
已邀请:
        我发现由于没有人说我所经历的不是错误,因此我将发布的发现作为答案: 对于Informix .NET提供程序(版本:3.5.xC7),请勿在生成ѭ14(或ѭ15)时显式设置ѭ4或ѭ13。相反,只需生成参数并允许Informix .NET提供程序为您映射正确的类型。这使您不必担心类型转换参数(即避免使用\“?:: blob \”和\“?:: byte \”)。 由于存在错误(版本:3.5.xC7),将byte []数组插入Blob字段可以正常工作,但使用byte []数组更新该Blob字段将导致609错误。相反,必须创建一个“ 2”并将其设置为值。在进行插入时这也适用。     

要回复问题请先登录注册