日期:2014-05-17  浏览次数:20456 次

.net链接oracle数据库下面SQL语句的问题
insert into LIS.MZDX(ID)values(LIS.mzautoid.nextval);select LIS.mzautoid.currval ID from dual;

目的是插入一条记录,获取自增列ID值

在网上找的多语句方案都没有办法实现,尝试过用ODP.NET的Oracle.DataAccess.Client,和.net自带的System.Data.OracleClient都不行
------最佳解决方案--------------------
我的做法是在程序中根据";"分割开语句,一条条执行,无需写存储过程,避免改动数据库。
------其他解决方案--------------------

--放在一起的话,你如果要返回值,需写sp去执行
using System;
using System.Data.SqlClient;

using System.Data.OracleClient;

public class Test
{
    /*
        建表及序列
        create table t(id int);
        create sequence t_seq;
     */
    public static void Main()
    {

        OracleConnection conn = null;
        OracleCommand cmd = null;
        int val = 0;

        const string sConn = "data source=orcl;user id=zhangjg;password=1;";
        try
        {
            conn = new OracleConnection(sConn);
            cmd = new OracleCommand("insert into t values(t_seq.nextval)", conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            cmd = new OracleCommand("select t_seq.currval from dual", conn);
            val = Convert.ToInt32(cmd.ExecuteScalar());
        }
        catch (Exception err)
        {
            Console.Write(err.Message);
        }
        finally
        {
            conn.Close();
        }
        Console.WriteLine(val);
        Console.ReadKey();
    }
}

------其他解决方案--------------------
insert into LIS.MZDX(ID)values(LIS.mzautoid.nextval)
select @@identity

------其他解决方案--------------------
引用:
C# code

--放在一起的话,你如果要返回值,需写sp去执行
using System;
using System.Data.SqlClient;

using System.Data.OracleClient;

public class Test
{
    /*
        建表及序列
        create tab