close

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.OracleClient;

 

namespace ExecuteSqlIntoDB

{

    class Program

    {

        ///<summary>

        /// insert/update into DB

        ///</summary>

        ///<param>0=insert, 1=update</param>

        ///<param></param>

        ///<param></param>

        ///<param></param>

        ///<param></param>

        ///<returns></returns>

        public string SaveData(int[] type, string[] targetTable, string[] whereCondition, string[][] columns, object[][] values)

        {

            string result = "error";

            string queryStr = string.Empty;

            //PLSQL使用username = system, password = oracle, database = xe, connect as = normal

            OracleConnection oConn = new   

                OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["OracleConnectionStr"].ToString());

        OracleTransaction trans = null;

 

            try

 

            {

                oConn.Open();

                trans = oConn.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);

                OracleCommand command = oConn.CreateCommand();

                command.Transaction = trans;

 

                for (int k = 0; k < type.Length; k++)

                {

                    command.Parameters.Clear();

                    //Insert data into DB

                    if (type[k] == 0)

                    {

                        queryStr = string.Format("insert into {0} ( ", targetTable[k]);

                        for (int i = 0; i < columns[k].Length; i++)

                        {

                            queryStr += string.Format("{0}", columns[k][i].Trim());

                            if (i != (columns[k].Length - 1))

                                queryStr += ", ";

                            else

                                queryStr += ") values( ";

                        }

                        for (int i = 0; i < values[k].Length; i++)

                        {

                            if (values[k][i].GetType().Name.Equals("String"))

                                queryStr += string.Format("UTL_RAW.CAST_TO_VARCHAR2(:{0})", columns[k][i].Trim());

                            else if (values[k][i].GetType().Name.Equals("DateTime"))

                                queryStr += string.Format("TO_TIMESTAMP('{0}','yyyy-mm-dd hh24:mi:ss')", ((DateTime)values[k][i]).ToString("yyyy-MM-dd HH:mm:ss"));

                            else

                                queryStr += string.Format("{0}", values[k][i].ToString());

                            if (i != (values[k].Length - 1))

                                queryStr += ", ";

                            else

                                queryStr += ") ";

                        }

                        command.CommandText = queryStr;

                        for (int i = 0; i < values[k].Length; i++)

                        {

                            if (values[k][i].GetType().Name.Equals("String"))

                            {

                                command.Parameters.Add(columns[k][i].Trim(), OracleType.Raw).Value =

                                    System.Text.Encoding.GetEncoding("UTF-8").GetBytes(values[k][i].ToString());

                            }

                        }

                    }

 

                    //Update data into DB

                    if (type[k] == 1)

                    {

                        queryStr = string.Format("update {0} set ", targetTable[k]);

                        for (int i = 0; i < values[k].Length; i++)

                        {

                            if (values[k][i].GetType().Name.Equals("String"))

                                queryStr += string.Format("{0} = UTL_RAW.CAST_TO_VARCHAR2(:{0})", columns[k][i].Trim());

                            else if (values[k][i].GetType().Name.Equals("DateTime"))

                                queryStr += string.Format("{0} = TO_TIMESTAMP('{1}','yyyy-mm-dd hh24:mi:ss')", columns[k][i].Trim(), ((DateTime)values[k][i]).ToString("yyyy-MM-dd HH:mm:ss"));

                            else

                                queryStr += string.Format("{0} = {1}", columns[k][i].Trim(), values[k][i].ToString());

                        }

                        if (!string.IsNullOrEmpty(whereCondition[k]))

                            queryStr += string.Format(" where {0}", whereCondition[k]);

                        command.CommandText = queryStr;

                        for (int i = 0; i < values[k].Length; i++)

                        {

                            if (values[k][i].GetType().Name.Equals("String"))

                            {

                                command.Parameters.Add(columns[k][i].Trim(), OracleType.Raw).Value =

                                    System.Text.Encoding.GetEncoding("UTF-8").GetBytes(values[k][i].ToString());

                            }

                        }

                    }

 

                    command.ExecuteNonQuery();

                }

                trans.Commit();

                result = "succeed";

            }

            catch (Exception ex)

            {

                return ex.Message;

            }

            finally

                oConn.Close(); 

                if(trans != null)

                    trans.Dispose();

            }

            return result;

        }

        static void Main(string[] args)

        {

            Program p = new Program();

            //insert data

            string result = p.SaveData(new int[] { 0, 0 }, new string[] { "test", "test" }, new string[] { string.Empty }, new string[][] { new string[] { "c1", "c2" }, new string[] { "c1", "c2" } }, new object[][] { new object[] { 3, "jack" }, new object[] { 4, "max" } });

            result = p.SaveData(new int[] { 1, 1 }, new string[] { "test", "test" }, new string[] { "c1 = 3", "c1 = 4" }, new string[][] { new string[] { "c2" }, new string[] { "c2" } }, new object[][] { new object[] {"jack_new" }, new object[] { "max_new" } });

        }

    }

}

 

arrow
arrow
    全站熱搜

    Big Bear 發表在 痞客邦 留言(0) 人氣()