
复制using System;              using System.Collections.Generic;              //using System.Linq;             using System.Text;              using System.Data;              using Npgsql ;              namespace PWMIS.DataProvider.Data              {              /// <summary>             /// PostgreSQL数据访问类             /// </summary>             publicclass PostgreSQL : AdoHelper                  {              /// <summary>             /// 默认构造函数             /// </summary>             public PostgreSQL()                      {              //             // TODO: 在此处添加构造函数逻辑             //                     }              /// <summary>             /// 获取当前数据库类型的动程枚举             /// </summary>             publicoverride PWMIS.Common.DBMSType CurrentDBMSType                      {              get { return PWMIS.Common.DBMSType.PostgreSQL ; }                       }              /// <summary>             /// 创建并且打开数据库连接             /// </summary>             /// <returns>数据库连接</returns>             protectedoverride IDbConnection GetConnection()                      {                          IDbConnection conn = base.GetConnection();              if (conn == null)                          {                              conn = new NpgsqlConnection (base.ConnectionString);              //conn.Open ();                         }              return conn;                      }              /// <summary>             /// 获取数据适配器实例             /// </summary>             /// <returns>数据适配器</returns>             protectedoverride IDbDataAdapter GetDataAdapter(IDbCommand command)                      {                          IDbDataAdapter ada = new NpgsqlDataAdapter((NpgsqlCommand)command);              return ada;                      }              /// <summary>             /// 获取一个新参数对象             /// </summary>             /// <returns>特定于数据源的参数对象</returns>             publicoverride IDataParameter GetParameter()                      {              returnnew NpgsqlParameter();                      }              /// <summary>             ///  获取一个新参数对象             /// </summary>             /// <param name="paraName">参数名</param>             /// <param name="dbType">参数数据类型</param>             /// <param name="size">参数大小</param>             /// <returns>特定于数据源的参数对象</returns>             publicoverride IDataParameter GetParameter(string paraName, System.Data.DbType dbType, int size)                      {                          NpgsqlParameter para = new NpgsqlParameter();                          para.ParameterName = paraName;                          para.DbType = dbType;                          para.Size = size;              return para;                      }              /// <summary>             /// 返回此 NpgsqlConnection 的数据源的架构信息。             /// </summary>             /// <param name="collectionName">集合名称</param>             /// <param name="restrictionValues">请求的
免费信息发布网序构
架构的一组限制值</param>             /// <returns>数据库架构信息表</returns>             publicoverride DataTable GetSchema(string collectionName, string[] restrictionValues)                      {              using (NpgsqlConnection conn = (NpgsqlConnection)this.GetConnection())                          {                              conn.Open();              if (restrictionValues == null && string.IsNullOrEmpty(collectionName))              return conn.GetSchema();              elseif (restrictionValues == null && !string.IsNullOrEmpty(collectionName))                              {              if (collectionName == "Procedures")              returnthis.getProcedures();              else            return conn.GetSchema(collectionName); //Procedures                             }              else                            {               if (collectionName == "ProcedureParameters")              return getFunctionArgsInfo(restrictionValues[2]);              else            return conn.GetSchema(collectionName, restrictionValues);                              }                          }                      }              /// <summary>             /// 预处理SQL语句,语句中不能包含"`"(反引号,建过
tab键上面的动程那个符号)号,如果需要,
源码下载序构请使用参数化查询。建过             /// </summary>             /// <param name="SQL"></param>             /// <returns></returns>             protectedoverridestring PrepareSQL(refstring SQL)                      {              return SQL.Replace("[",动程 "\"").Replace("]", "\"");                      }              /// <summary>             /// 获取或者设置自增列对应的序列名称             /// </summary>             publicoverridestring InsertKey                      {              get                        {              returnstring.Format("select currval(\"\")",base.InsertKey );                          }              set                        {              base.InsertKey = value;                          }                      }              /// <summary>             /// 定义获取PostgreSQL的函数参数的函数             /// <seealso cref="http://www.alberton.info/postgresql_meta_info.html"/>             /// </summary>             privatevoid createFunctionArgsInfo()                      {              //由于函数定义语句较长,放到了资源文件中             string sql = PWMIS.PostgreSQLClient.Properties.Resources.sql_function_args;              this.SqlServerCompatible = false;              this.ExecuteNonQuery(sql);                      }              /// <summary>             /// 获取函数的
企商汇序构参数信息             /// </summary>             /// <param name="functionName">函数名</param>             /// <returns></returns>             private DataTable  getFunctionArgsInfo(string functionName)                      {              string sql = string.Format("select * from function_args(,public);", functionName);                          DataSet ds = null;              try                        {                              ds= this.ExecuteDataSet(sql);                          }              catch                        {                              createFunctionArgsInfo();                              ds = this.ExecuteDataSet(sql);                          }                          DataTable dt = ds.Tables[0];                          dt.Columns["pos"].ColumnName = "ordinal_position";                          dt.Columns["argname"].ColumnName = "PARAMETER_NAME";                          dt.Columns["datatype"].ColumnName = "DATA_TYPE";                          dt.Columns["direction"].ColumnName = "PARAMETER_MODE";                          dt.Columns.Add("IS_RESULT", typeof(string));                          dt.Columns.Add("CHARACTER_MAXIMUM_LENGTH", typeof(int));              foreach (DataRow row in dt.Rows)                          {              if(row["PARAMETER_NAME"] == DBNull.Value)  row["PARAMETER_NAME"] =  "";                               row["IS_RESULT"] = row["PARAMETER_NAME"].ToString() == "RETURN VALUE" ? "YES" : "NO";                              row["PARAMETER_MODE"] = row["PARAMETER_MODE"].ToString() == "o" ? "OUT" : row["PARAMETER_MODE"].ToString() == "i" ? "IN" : row["PARAMETER_MODE"];                          }              return dt;                      }              private DataTable getProcedures()                      {              string sql = @"SELECT routine_name                FROM information_schema.routines               WHERE specific_schema NOT IN                     (pg_catalog, information_schema)                 AND type_udt_name != trigger;";              returnthis.ExecuteDataSet(sql).Tables[0];                      }                  }              }              1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.177.178.179.180.181.182.183.184.185.186.187.188.189.190.191.192.193.194.195.196.