1. 程式人生 > >c#訪問Oracle資料庫,執行資料庫操作

c#訪問Oracle資料庫,執行資料庫操作

第一步:應用伺服器安裝Oracle11g客戶端

第二步:在Oracle資料庫中新增表:


第三步,在C#程式中訪問資料庫進行數控操作:

在程式中引用:System.Data.OracleClient

1.執行sql 語句返回受影響的行數:

//執行sql 語句返回受影響的行數
new MyOracleDBHelper().ExecuteNonQuery("insert into tb_user(userid,username) values (2,'張三');");

2.執行儲存過程,返回受影響的行數

在Oracle資料庫中新增儲存過程:

create or replace
procedure padduser(v_ID IN NUMBER, v_NAME IN VARCHAR2) is
begin
      insert into tb_user(userid, username) values(v_ID, v_NAME);
end padduser;
呼叫:
OracleParameter[] param1 = new OracleParameter[2];
param1[0] = new OracleParameter("v_ID", 6);
param1[1] = new OracleParameter("v_NAME", "test123456");
new MyOracleDBHelper().ExecuteNonQuery("padduser", param1);

3.執行SQL語句,返回DataSet
DataSet ds1 = new MyOracleDBHelper().ExecuteDataSet("select USERID,USERNAME from TB_USER t ORDER BY t.userid asc");
foreach (DataRow item in ds1.Tables[0].Rows)
{
    System.Console.WriteLine(string.Format("{0}:{1}", item["USERID"].ToString(), item["USERNAME"].ToString()));
}

4.執行儲存過程,返回DataSet

在Oracle資料庫中新增儲存過程:

create or replace
procedure Demo(data out sys_refcursor) as
begin
   open data for select* from tb_user;
end Demo;
呼叫:
OracleParameter[] param2 = new OracleParameter[1];
param2[0] = new OracleParameter("data", OracleType.Cursor);
param2[0].Direction = ParameterDirection.Output;
DataSet ds2 = new MyOracleDBHelper().ExecuteDataSet("Demo", param2);
foreach (DataRow item in ds2.Tables[0].Rows)
{
    System.Console.WriteLine(string.Format("{0}:{1}", item["USERID"].ToString(), item["USERNAME"].ToString()));
}

附MyOracleDBHelper.cs:
    public class MyOracleDBHelper
    {
        //private static readonly string OracleConnStr = ConfigurationManager.AppSettings["TEST_OracleConnStr"];
        private static readonly string OracleConnStr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.217)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)));Persist Security Info=True;User ID=system;Password=System123456;";

        /// <summary>
        /// 執行SQL語句
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns>返回受影響的行數</returns>
        public int ExecuteNonQuery(string strSql)
        {
            int result = 0;
            using (OracleConnection con=new OracleConnection (OracleConnStr))
            {
                if (con.State == System.Data.ConnectionState.Closed)
                    con.Open();
                using (OracleCommand cmd = new OracleCommand(strSql, con))
                {
                    result = cmd.ExecuteNonQuery();
                }

                con.Close();
            }
            return result;
        }

        /// <summary>
        /// 執行儲存過程
        /// </summary>
        /// <param name="strProcedure"></param>
        /// <param name="param"></param>
        /// <returns>返回受影響的行數</returns>
        public int ExecuteNonQuery(string strProcedure, OracleParameter[] param)
        {
            int result = 0;
            using (OracleConnection con = new OracleConnection(OracleConnStr))
            {
                if (con.State == System.Data.ConnectionState.Closed)
                    con.Open();
                using (OracleCommand cmd=new OracleCommand())
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.CommandText = strProcedure;
                    cmd.Connection = con;

                    foreach (var item in param)
                    {
                        cmd.Parameters.Add(item);
                    }

                    result = cmd.ExecuteNonQuery();
                }

                con.Close();
            }
            return result;
        }

        /// <summary>
        /// 執行SQL語句
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns>返回DataSet 結果集</returns>
        public DataSet ExecuteDataSet(string strSql)
        {
            using (DataSet ds = new DataSet())
            {
                using (OracleConnection con = new OracleConnection(OracleConnStr))
                {
                    if (con.State == ConnectionState.Closed)
                        con.Open();
                    using (OracleCommand cmd = new OracleCommand(strSql, con))
                    {
                        using (OracleDataAdapter sda = new OracleDataAdapter())
                        {
                            sda.SelectCommand = cmd;
                            sda.Fill(ds);
                        }
                    }

                    con.Close();
                }

                return ds;
            }
        }

        /// <summary>
        /// 執行儲存過程
        /// </summary>
        /// <param name="strProcedure"></param>
        /// <param name="param"></param>
        /// <returns>返回DataSet 結果集</returns>
        public DataSet ExecuteDataSet(string strProcedure, OracleParameter[] param)
        {
            using (DataSet ds=new DataSet ())
            {
                using (OracleConnection con = new OracleConnection(OracleConnStr))
                {
                    if (con.State == ConnectionState.Closed)
                        con.Open();

                    using (OracleCommand cmd=new OracleCommand ())
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = strProcedure;
                        cmd.Connection = con;

                        foreach (var item in param)
                        {
                            cmd.Parameters.Add(item);
                        }

                        using (OracleDataAdapter dap=new OracleDataAdapter ())
                        {
                            dap.SelectCommand = cmd;
                            dap.Fill(ds);
                        }
                    }

                    con.Close();
                }

                return ds;
            }
        }
    }

附程式程式碼:
class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //執行sql 語句返回受影響的行數
                new MyOracleDBHelper().ExecuteNonQuery("insert into tb_user(userid,username) values (2,'張三');");

                //執行儲存過程,返回受影響的行數
                //create or replace
                //procedure padduser(v_ID IN NUMBER, v_NAME IN VARCHAR2) is
                //begin
                //    insert into tb_user(userid, username) values(v_ID, v_NAME);
                //end padduser;

                OracleParameter[] param1 = new OracleParameter[2];
                param1[0] = new OracleParameter("v_ID", 6);
                param1[1] = new OracleParameter("v_NAME", "test123456");
                new MyOracleDBHelper().ExecuteNonQuery("padduser", param1);


                //執行SQL語句,返回DataSet
                DataSet ds1 = new MyOracleDBHelper().ExecuteDataSet("select USERID,USERNAME from TB_USER t ORDER BY t.userid asc");
                foreach (DataRow item in ds1.Tables[0].Rows)
                {
                    System.Console.WriteLine(string.Format("{0}:{1}", item["USERID"].ToString(), item["USERNAME"].ToString()));
                }

                //執行儲存過程,返回DataSet
                //create or replace
                //procedure Demo(data out sys_refcursor) as
                //begin
                //  open data for select* from tb_user;
                //end Demo;
                OracleParameter[] param2 = new OracleParameter[1];
                param2[0] = new OracleParameter("data", OracleType.Cursor);
                param2[0].Direction = ParameterDirection.Output;
                DataSet ds2 = new MyOracleDBHelper().ExecuteDataSet("Demo", param2);
                foreach (DataRow item in ds2.Tables[0].Rows)
                {
                    System.Console.WriteLine(string.Format("{0}:{1}", item["USERID"].ToString(), item["USERNAME"].ToString()));
                }

            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }

            System.Console.Read();
        }
    }

C#針對Oracle資料庫的簡單常見操作完成!