鉴于 ExecuteNonQuery() 中对象的当前状态,操作无效

xLioneth

我正在尝试插入,在这种情况下会出现重复的密钥更新。一切都来自 Oracle 并使用程序,但我收到此错误,我不知道为什么

public static int GrabarJugador(Jugador_E jugador)
    {
        int respuesta = 0;

        try
        {
            conexion = bd.LeerDeBaseDeDatos();

            orden = new OracleCommand();
            orden.CommandText = "CONSULTAS.grabar_jugador";
            orden.CommandType = CommandType.StoredProcedure;
            orden.Parameters.Add("v_nombre", OracleDbType.Varchar2, 60).Value = jugador.Nombre;
            orden.Parameters.Add("v_equipo", OracleDbType.Varchar2, 50).Value = jugador.EquipoJugador;
            orden.Parameters.Add("v_direccion", OracleDbType.Varchar2, 150).Value = jugador.Direccion;
            orden.Parameters.Add("v_puesto", OracleDbType.Varchar2, 2).Value = jugador.PuestoHab;
            orden.Parameters.Add("v_fec_na", OracleDbType.Date).Value = jugador.Fecha;
            orden.Parameters.Add("v_foto", OracleDbType.Blob).Value = jugador.Foto;

            respuesta = orden.ExecuteNonQuery();

            orden.Dispose();

            bd.CerrarConexion();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error " + e.ToString());
            Console.ReadLine();
        }

            return respuesta;
    }

DB Oracle 中的代码过程是这样的:

PROCEDURE GRABAR_JUGADOR (v_nombre         VARCHAR,
                          v_equipo         VARCHAR2,
                          v_direccion      VARCHAR2,
                          v_puesto_h       VARCHAR2,
                          v_fec_na         DATE,
                          v_foto        IN BLOB)
IS
BEGIN
    INSERT INTO JUGADOR (NOMBRE,
                         DIRECCION,
                         PUESTO_HAB,
                         FECHA_NAC,
                         EQUIPO_JUGADOR,
                         FOTO_JUGADOR)
         VALUES (v_nombre,
                 v_direccion,
                 v_puesto_h,
                 v_fec_na,
                 v_equipo,
                 v_foto);
EXCEPTION
    WHEN DUP_VAL_ON_INDEX
    THEN
        UPDATE jugador
           SET equipo_jugador = v_equipo,
               direccion = v_direccion,
               puesto_hab = v_puesto_h,
               fecha_nac = v_fec_na,
               foto_jugador = v_foto
         WHERE nombre = v_nombre;

  WHEN OTHERS
    THEN
        raise_application_error (
            -20100,
            'Error inexperado: '|| SQLERRM);
END GRABAR_JUGADOR;

我试过错误是针对 Blob 还是日期,但不是这个。该错误仅在 Orden.ExecuteNonQuery(); 中出现;

编辑1:我修复了错误,是命令中的连接,但是现在当我为照片充电时插入/更新图片播放器(blob)时,程序给我1个错误:参数无效。

编辑 2:我看到错误是当我将 blob 保存在 Oracle DB 中时

if (jugador.Foto != null)
        {
            MemoryStream ms = new MemoryStream();
            ms.Write(jugador.Foto, 0, Convert.ToInt32(jugador.Foto.Length));
            Bitmap bm = new Bitmap(ms, false); //this line break error
            ms.Dispose();
            pictureBox1.Image = bm;
        }

谢谢你帮我。

骆驼

既然你说你已经解决了你的第一个问题,我只会解决最底层的问题(你可能应该编辑你的问题,因为第一部分现在无关紧要)。

您看到的问题是因为您写入流的末尾,然后尝试以流的末尾作为起点读取图像在读取图像之前,您需要返回到流的开头。因此,您的代码应该是:

if (jugador.Foto != null)
{
    using(MemoryStream ms = new MemoryStream())
    {
        ms.Write(jugador.Foto, 0, Convert.ToInt32(jugador.Foto.Length));
        ms.Seek(0, SeekOrigin.Begin); // seek to the beginning of the stream
        Bitmap bm = new Bitmap(ms, false);
        pictureBox1.Image = bm;
    }
}

我也把它搬到了MemoryStream一个using街区。

切线注意事项:

  • Microsoft 的实现MemoryStream意味着这不是问题,但是如果您正在写入文件或网络套接字等,您可能需要调用.Flush()以确保数据已发送/保存并且不会被卡住在临时内存中。
  • 并非所有 Streams 都是可搜索的,因此有一个CanSeek属性(除了CanReadCanWrite)来指示您是否可以搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django 3.0:鉴于模板中的选定选项,无法获得价值

UPDATE操作-由于对象的当前状态,该操作无效

Executenonquery 需要打开且可用的连接。连接当前状态是关闭的

SqlBulkCopy 抛出“由于对象的当前状态,操作无效”

错误:“由于对象的当前状态,操作无效”

REST API:由于对象的当前状态,操作无效

由于对象的当前状态,IEquatable操作无效

ExecuteNonQuery 中的 SQL 更新命令错误

如何在Intiger中设置executenonquery的结果

由于Unity 3d中对象的当前状态,该操作无效

由于C#实体框架中对象的当前状态,因此该操作无效

如何修复.Net Azure Function App中的“由于对象的当前状态,操作无效”错误?

鉴于NOW(),您如何在MySQL中获取每周第一天的DATETIME对象?

Docusign-从POST到PUT的X-HTTP-Method-Override-鉴于将信封状态更新为无效

试图使用recyclerview,我不能让鉴于架在对象的内容

鉴于 omega 策略在 Coq 中得到了推荐,如何导入 lia 策略?

鉴于 grep -n 的结果,如何在该特定行中打开 vim?(仅使用键盘)

Django - 鉴于模型选择的显示,如何从选择元组中检索值?

鉴于“n”是列表的长度,我可以知道如何在 python 中遵循 for 循环

鉴于我正在查找列上的值,在表中查找行。路径

由于对象的当前状态,该操作无效。使用dotnet core 5在eventhub中获取microsoft.azure.amqp

如何在ExecuteReader中具有两个executeNonQuery

ExecuteNonQuery响应

为什么会收到此错误{“由于对象的当前状态,操作无效。”} C#

回发期间“由于对象的当前状态,操作无效”错误

“由于对象的当前状态,操作无效。” 例外,当我要检索项目时

由于对象的当前状态(System.Text.Json),操作无效

由于对象的当前状态,操作无效。当我删除按钮时

鉴于我们必须传递与 props 相同的对象,如何不可变地更新对象?