asp.net Oracle 之Insert 与 Update 更新封闭代码

asp教程.net oracle 之insert 与 update 更新封闭代码
 
觉得我可以从数据库教程的更新方法下手,于是有了下面这些尝试了。

在oracle 中insert 语句是可以使用 returning 返回新增的记录的。

于是我们的insert 语句就是这样了.

insert into tablename (uniquecolumn,othercolumns)
values(table_seq.nextval,values) returning uniquecolumn into :unique_id。

这样执行之后,我就可以通过out参数 unique_id 获取新增的记录的主键啦

 

public override object insert(editorparams pm)
        {
            if (pm != null && pm.editvalues.count > 0)
            {
                querysetting qs = configenginer.instance.datamodels[pm.modeltype];
                string insertformart = @"insert into #oysterval:tablename# (#oysterval:uniquecolumn#,#oysterval:columns#)
values(#oysterval:tablename#_seq.nextval,#oysterval:values#) returning #oysterval:uniquecolumn# into :unique_id";

                dictionary<string, string> vals = new dictionary<string, string>();
                list<idataparameter> parms = new list<idataparameter>();

                vals.add("tablename", qs.tablename);
                vals.add("uniquecolumn", qs.uniquecolumn.columnname);
                vals.add("columns", pm.insertcolumns);
                vals.add("values", pm.insertvalues);

                //system.nullable
                var unqtype = qs.uniquecolumn.propertytype;
                if (unqtype.fullname.contains("system.nullable"))
                {
                    var types = unqtype.getgenericarguments();
                    if (types != null && types.length > 0)
                    {
                        unqtype = types[0];
                    }
                }

                var pr = new oracleparameter(":unique_id", activator.createinstance(unqtype));
                pr.direction = parameterdirection.inputoutput;
                parms.add(pr);
                parms.addrange(pm.dataparms);

                string sql = insertformart.tooystertemplate(vals);
                pm.effectcount = dbenginer.instance.executenonquery(sql, parms.toarray());
                pm.effectuniqueids.add(pr.value);
                return pm.effectuniqueids[0];
            }
            else
            {
                throw new exception("请检查传入的editparams,更新列数据不能为空!");
            }

            return null;
        }

里面使用到的其他类型引用,以后会慢慢分享。

而update 则可以这样:select uniquecolumn from tablename where condition for update。

将要更新的行select 出来,并且加上update 的锁。保证update按顺序执行,而不会错乱

时间: 2024-11-03 02:17:37

asp.net Oracle 之Insert 与 Update 更新封闭代码的相关文章

MySql多表关联Update更新sql语句

对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置.有时候更新某个表可能会涉及到多张数据表,例如:  代码如下 复制代码 update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10); 其实update也可以用到left join.inner joi

Oracle\MS SQL Server Update多表关联更新

原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表   一.MS    SQL    Server   多表关联更新      sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就

C# DataTable里的数据怎么快速insert,update进oracle DB

问题描述 oracle现在是从其他地方得到一个DataTable,里面的数据要insert或者update到数据库,原先的写法是遍历DataTable,比对数据库里没数据就insert,有就update但是如果数据大的情况下,这种方式很慢,不知道各位前辈大侠有好的方法吗?其实是两个服务器上的数据库A和B,要把A的数据更新到B的数据,但是不做link,要在C#程式里执行 解决方案 解决方案二:-----------------------------------------------------

在ASP.NET+ORACLE添加数据记录并让ID自动增量

在ASP.NET+ORACLE添加数据记录并让ID自动增量需要在ORACLE中设序列和触发器即可,切记不是索引,ASP.NET中不管ID,具体如下: 1.建立序列: CREATE SEQUENCE seq_emergency_id NOCYCLE MAXVALUE 9999999999 START WITH 2;   2.建立触发器:  CREATE OR REPLACE TRIGGER set_emergency_id BEFORE INSERT ON "EMERGENCY"FOR

MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍,需要的朋友参考下   MySQL数据库insert和update语句引:用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INSERT.UPDATE以及DELETE. 用 于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的S

C#中SQLserver语句insert语句无法更新数据

问题描述 C#中SQLserver语句insert语句无法更新数据 string sqlUpdataString = "insert into RelationTab(RelationId,FoodId,OrderId,FoodName,FoodPrice) values(" + RelationIdMax + "," + FoodId + "," + OrderId + ",'" + FoodName + "',&

sql-数据库insert,update触发器怎么同时写在一个触发器里

问题描述 数据库insert,update触发器怎么同时写在一个触发器里 数据库里有A表和B表,A表新增数据的时候,也往B表里新增数据,A表在修改数据的时候,B表会记录这条数据,同样是新增数据,但是当这条数据再次被修改时,B表里的记录永远是修改后的数据,求告知触发器insert 与update 写在一起时,是怎么写的 解决方案 create or replace xxx_trg trigger as after update or insert on table a for each row d

asp net 数据库 sql-asp.net数据库连接,更新不成功啊

问题描述 asp.net数据库连接,更新不成功啊 课程设计要做一个图书管理系统的,这是我在数据库更新的代码,就是按下按钮之后更新textbox3里的数据,在下面的代码可以成功更新数据库内容 . 1.用这段代码在页面没什么错误,书上是这样写的,但是更新不了数据库,数据库文件没变化. Dim str1, strConn As String str1 = "update memberinfo set 密码问题= @mmwt where 账号=@zh" '怎么更新不了数据库啊? strConn

详解MySQL数据库insert和update语句_Mysql

 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.SQL语句中的更新语句update是最常用的语句之一,言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INSERT.UPDATE以及DELETE. 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.言外之意,就 是对数据进行修改.在标准的SQL中有3个语句,它们是INSERT