首页 > 解决方案 > OLEDBConnection:将字节 [] 插入 blob 不会保存更改

问题描述

我正在尝试使用 OLEDBconnection 更新记录。我要更新的数据(以字节数组形式)将作为 blob 存储在 oracle 中。但是,当线路到达 时ExecuteNonQuery,什么都没有改变

我试过的:

我认为查询本身有问题。所以我尝试了以下方法:

1:用其他查询测试:

@"UPDATE dcmnts 
             SET TestCol = ?
             where BUSNSS_ID = ?";

通过运行此程序,TestCol成功更新。它是一个 varchar 列

2:确保绑定与问号出现在查询中的顺序相同,也不起作用

3:最后放a Console.WriteLine,提示:“1 row with 12345678 updated”,所以确实更新了,但是当我查看Oracle Developer时,Summary_SPOD列仍然为空

    public void SaveSPODLetter(byte[] Letter, string TrackingNumber )
    {
        string query = @"UPDATE dcmnts 
                         SET SUMMARY_SPOD = ?
                         where BUSNSS_ID = ?";
        OleDbCommand command = null;
        string ConnString = ConfigurationManager.ConnectionStrings["My_db"].ToString();

        using (OleDbConnection connection = new OleDbConnection(BaseEncryptor.DecryptString(ConnString)))
        {
            try
            {
                if (connection.State != ConnectionState.Open)
                    connection.Open();
                command = new OleDbCommand(query, connection);
                command.Parameters.Add(new OleDbParameter("SUMMARY_SPOD", Letter));
                command.Parameters.Add(new OleDbParameter("BUSNSS_ID", TrackingNumber));
                int rowUpdate = command.ExecuteNonQuery();
                Console.WriteLine($"{rowUpdate} row with {TrackingNumber} updated");
            }
            finally
            {
                if (command != null) { command.Dispose(); command = null; }
            }
        }
    }

我不确定为什么它仍然显示错误,这与Letter字节数组的事实有关吗?

标签: c#oraclevisual-studiooledb

解决方案


我不确定这是否算作解决方案,但它似乎与 OleDB 有关。

我从来不知道为什么,所以我切换到Oracle.DataAccess.Client并相应地更改了所有功能。在那之后,它奏效了。

public void SaveSPODLetter(byte[] Letter, string TrackingNumber )
{
    string query = @"UPDATE dcmnts 
                     SET SUMMARY_SPOD = :Summary_SPOD
                     where BUSNSS_ID = :BUSNSS_ID";
    OracleCommand command = null;
    string ConnString = ConfigurationManager.ConnectionStrings["My_db"].ToString();

    using (OracleConnection connection = new OracleConnection(BaseEncryptor.DecryptString(ConnString)))
    {
        try
        {
            if (connection.State != ConnectionState.Open)
                connection.Open();
            command = new OracleCommand(query, connection);
            command.Parameters.Add(new OracleParameter("Summary_SPOD", Letter));
            command.Parameters.Add(new OracleParameter("BUSNSS_ID", TrackingNumber));
            command.ExecuteNonQuery();
            //Console.WriteLine($"{rowUpdate} row with {TrackingNumber} updated");
        }
        finally
        {
            if (command != null) { command.Dispose(); command = null; }
        }
    }
}

推荐阅读