从表中读取数据,然后插入表中

相同

那是从表中读取数据然后插入表中的正确方法吗?

我正在尝试读取最大数量或rec_id以创建seq列+1以将我的数据记录插入同一表

                //Opening the connection with Oracle Database
            OracleConnection conn = new OracleConnection(oradb);
            conn.Open();

            //Create the oracle statment and insert data into oracle database 
            OracleCommand cmd1 = new OracleCommand();
            cmd1.Connection = conn;

            cmd1.CommandText = "SELECT NVL (MAX (rec_id), 0) + 1 FROM backup_check";
            OracleDataReader dr = cmd1.ExecuteReader();
            dr.Read();
            label1.Text = dr.GetString(0);
            conn.Dispose();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            //OracleTransaction trans = conn.BeginTransaction(); -- add rollback in case of transaction not complate for some reason
            cmd.CommandText = "insert into my table(" + "'" + v_rec_id + "'" + ",OFFICE_CODE,DUMP_NAME,DUMP_STATUS,SYSTEM,CHECK_DATE)values(null,null," + "'" + keyword + "'" + ",'0','abc',sysdate)";
            cmd.ExecuteNonQuery();

            //Closing the connection with oracle databae
            conn.Dispose();
史蒂夫

首先,您应该忘记使用MAX函数来检索要插入“自动增量列”中的下一个值问题是由于您在一台计算机上运行的代码无法阻止另一台计算机上的另一个用户与您的代码同时执行而导致的。这可能会导致两个用户都收到相同的MAX结果,从而创建无效的重复密钥。

在Oracle中,应将表标记为具有主键(REC_ID)SEQUENCE

像这样的东西(即时写在这里没有经过测试...。)

CREATE TABLE myTable 
(
    rec_id NUMBER PRIMARY KEY
    .... other columns follow
);
CREATE SEQUENCE  myTable_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;

CREATE OR REPLACE TRIGGER myTable_trg
BEFORE INSERT ON myTable
   for each row
   begin
      select myTable_seq.nextval into :new.rec_id from dual;
   end;

此时,当您尝试插入新记录时,触发器将启动并计算下一个要分配给您的主键的值。
C#代码已大大简化,变为:

string cmdText = @"insert into myTable
         (OFFICE_CODE,DUMP_NAME,DUMP_STATUS,SYSTEM,CHECK_DATE)
         values(null,:keyw,'0','abc',sysdate)";
using(OracleConnection conn = new OracleConnection(oradb))
using(OracleCommand cmd = new OracleCommand(cmdText, conn))
{
    conn.Open();
    //using(OracleTransaction trans = conn.BeginTransaction())
    //{
    cmd.Parameters.AddWithValue(":keyw",keyword);
    cmd.ExecuteNonQuery();
    // trans.Commit();
    //}
}

之前无需阅读任何内容,命令文本未连接在一起,避免了SQL注入,关闭和处理是从using块自动退出的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从表中读取数据,然后插入表中

来自分类Dev

将表中的数据插入到临时表中,然后从临时表中选择特定行

来自分类Dev

从Oracle表中插入然后删除行

来自分类Dev

复制元素,然后将其插入表中

来自分类Dev

数据连续插入表中

来自分类Dev

无法在表中插入数据

来自分类Dev

数据连续插入表中

来自分类Dev

一次将数据插入表中,然后从mySQL select命令中检索数据

来自分类Dev

在MySql中,如何将数据插入引用其他三个表的表中,然后选择该数据?

来自分类Dev

在 vba 中从 QUEry 填充数组,然后将数据插入表中

来自分类Dev

从表的列中插入数据,然后将另一个表存储到列中

来自分类Dev

将列表中的数据插入表中

来自分类Dev

从一个表中选择数据,然后使用PHP将其插入到现有表中

来自分类Dev

将多个表中的数据插入单个表中

来自分类Dev

查找表名称,然后从该表中获取数据。

来自分类Dev

从表中读取数据在特定表中不起作用

来自分类Dev

在Oracle表中插入随机数据

来自分类Dev

可以在表中插入任意数据吗?

来自分类Dev

在mysql中插入数据而不是删除表

来自分类Dev

表单中的数据未插入用户表

来自分类Dev

在mysql存储过程的表中插入数据

来自分类Dev

从表中的联接插入数据

来自分类Dev

在个人ID表behlf中插入数据

来自分类Dev

如何将数据插入表中?

来自分类Dev

从选择语句向表中插入数据

来自分类Dev

使用mySQLi在表中插入数据

来自分类Dev

数据未插入我的表中

来自分类Dev

将数据插入到magento表中

来自分类Dev

使用Java将数据插入表中