c#操作postgresql

目录

类库:

使用:

执行SQL方法:

获取DataTable方法:


类库:

Npgsql

使用:

            string ip = "192.168.1.1";
            string port = "5432";
            string dbname = "lddb";
            string user = "postgres";
            string password = "123456";
            string schema = "test";
            string strSourceConnect = string.Format("Host={0};Username={1};Password={2};Port={3};Database={4};Schema={5};", ip, user, password, port, dbname, schema);
            //数据库超时问题Pooling=False;CommandTimeout=50000;
            // string strSourceConnect = string.Format("Host={0};Username={1};Password={2};Port={3};Database={4};Pooling=False;CommandTimeout=50000;Schema={5};", CommonClass.PostIP, CommonClass.PostUserName, CommonClass.PostPassword, CommonClass.PostPort, CommonClass.PostDBName, "public");
            DataTable dt = PostgresqlGetDataTable(strSourceConnect, "select * from test1");
            List<string> lstSQL = new List<string>();
            lstSQL.Add("update test2 set field1='1'");
            ExecuteSql(strSourceConnect, lstSQL);

执行SQL方法:

        public static void ExecuteSql(string sConnectionString, List<string> listExecuteNonQuery)
        {
            string SchemeName = "";
            string ConnectionString = "";
            NpgsqlTransaction Transaction = null;
            NpgsqlConnection Connection = null;
            string strConn = sConnectionString;
            try
            {
                if (strConn.EndsWith(";"))
                {
                    strConn = strConn.Substring(0, strConn.Length - 1);
                }
                string[] strConns = strConn.Split(';');
                strConn = "";
                for (int i = 0; i < strConns.Length - 1; i++)
                {
                    strConn = strConn + strConns[i] + ";";
                }
                ConnectionString = strConn;
                SchemeName = strConns[strConns.Length - 1].Split('=')[1];


                Connection = new NpgsqlConnection(ConnectionString);
                Connection.Open();
                if (Connection.State == ConnectionState.Open)
                {
                    string strSetScheme = "set search_path to " + SchemeName;

                    NpgsqlCommand Command = new NpgsqlCommand(strSetScheme, Connection);
                    if (Transaction != null)
                    {
                        Command.Transaction = Transaction;
                    }
                    Command.ExecuteNonQuery();

                    //执行SQL
                    //int intNumberIfAffectedRows = 0;
                    Transaction = Connection.BeginTransaction();//sql语句过多时开启事务
                    try
                    {

                        foreach (string sqlExecuteNonQuery in listExecuteNonQuery)
                        {
                            Command = new NpgsqlCommand(sqlExecuteNonQuery, Connection);
                            if (Transaction != null)
                            {
                                Command.Transaction = Transaction;
                            }
                            int tt = Command.ExecuteNonQuery();
                            //if (tt > 0)
                            //{
                            //    intNumberIfAffectedRows++;
                            //}
                        }
                        //if (intNumberIfAffectedRows == listExecuteNonQuery.Count)
                        //{
                        Transaction.Commit();
                        Transaction = null;
                        //}
                    }
                    catch (System.Exception ex)
                    {
                        Console.WriteLine("执行SQL异常:" + ex.Message);
                        if (Transaction != null)
                        {
                            Transaction.Rollback();//异常则回滚事务

                        }
                    }
                    Connection.Close();
                    if (Connection.State == ConnectionState.Closed)
                    {

                    }
                }
                else
                    Console.WriteLine("连接失败");

            }
            catch (System.Exception ex)
            {
                Console.WriteLine("异常:" + ex.Message);
            }

        }

获取DataTable方法:

        public static void ExecuteSql(string sConnectionString, List<string> listExecuteNonQuery)
        {
            string SchemeName = "";
            string ConnectionString = "";
            NpgsqlTransaction Transaction = null;
            NpgsqlConnection Connection = null;
            string strConn = sConnectionString;
            try
            {
                if (strConn.EndsWith(";"))
                {
                    strConn = strConn.Substring(0, strConn.Length - 1);
                }
                string[] strConns = strConn.Split(';');
                strConn = "";
                for (int i = 0; i < strConns.Length - 1; i++)
                {
                    strConn = strConn + strConns[i] + ";";
                }
                ConnectionString = strConn;
                SchemeName = strConns[strConns.Length - 1].Split('=')[1];


                Connection = new NpgsqlConnection(ConnectionString);
                Connection.Open();
                if (Connection.State == ConnectionState.Open)
                {
                    string strSetScheme = "set search_path to " + SchemeName;

                    NpgsqlCommand Command = new NpgsqlCommand(strSetScheme, Connection);
                    if (Transaction != null)
                    {
                        Command.Transaction = Transaction;
                    }
                    Command.ExecuteNonQuery();

                    //执行SQL
                    //int intNumberIfAffectedRows = 0;
                    Transaction = Connection.BeginTransaction();//sql语句过多时开启事务
                    try
                    {

                        foreach (string sqlExecuteNonQuery in listExecuteNonQuery)
                        {
                            Command = new NpgsqlCommand(sqlExecuteNonQuery, Connection);
                            if (Transaction != null)
                            {
                                Command.Transaction = Transaction;
                            }
                            int tt = Command.ExecuteNonQuery();
                            //if (tt > 0)
                            //{
                            //    intNumberIfAffectedRows++;
                            //}
                        }
                        //if (intNumberIfAffectedRows == listExecuteNonQuery.Count)
                        //{
                        Transaction.Commit();
                        Transaction = null;
                        //}
                    }
                    catch (System.Exception ex)
                    {
                        Console.WriteLine("执行SQL异常:" + ex.Message);
                        if (Transaction != null)
                        {
                            Transaction.Rollback();//异常则回滚事务

                        }
                    }
                    Connection.Close();
                    if (Connection.State == ConnectionState.Closed)
                    {

                    }
                }
                else
                    Console.WriteLine("连接失败");

            }
            catch (System.Exception ex)
            {
                Console.WriteLine("异常:" + ex.Message);
            }

        }

猜你喜欢

转载自blog.csdn.net/fangyu723/article/details/115084504