【问题标题】:OLEDBConnection: Insert byte[] into blob doesn't save changeOLEDBConnection:将字节 [] 插入 blob 不会保存更改
【发布时间】:2021-08-16 14:56:41
【问题描述】:

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

我尝试过的:

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

1:用其他查询测试:

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

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

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

3:在最后放一个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 是一个字节数组有关?

【问题讨论】:

  • 试试command.Parameters.Add("Letter", OleDbType.VarBinary).Value = Letter;
  • 不幸的是@Izzy 同样的事情

标签: c# oracle visual-studio oledb


【解决方案1】:

我不确定这是否算作解决方案,但似乎与 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; }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2013-05-23
    • 2013-02-13
    • 2020-08-11
    相关资源
    最近更新 更多