예제 #1
0
        /// <summary>
        /// 转换成SqlParameter
        /// </summary>
        /// <param name="parameters">参数集合</param>
        /// <returns>返回转换成SqlParameter集合</returns>
        private Dictionary <string, DB2Parameter> ConvertToSqlParameter(KdtParameterCollection parameters)
        {
            Dictionary <string, DB2Parameter> result = new Dictionary <string, DB2Parameter>(StringComparer.OrdinalIgnoreCase);

            if (parameters != null && parameters.Count > 0)
            {
                foreach (var item in parameters)
                {
                    DB2Parameter param = new DB2Parameter("{0}{1}".ToFormat(ParamPrifix, item.Name), item.Value);

                    switch (item._InPutType)
                    {
                    case ProcInPutEnum.OutPut: param.Direction = ParameterDirection.Output; break;

                    case ProcInPutEnum.ReturnValue: param.Direction = ParameterDirection.ReturnValue; break;

                    case ProcInPutEnum.InputOutPut: param.Direction = ParameterDirection.InputOutput; break;

                    default: param.Direction = ParameterDirection.Input; break;
                    }

                    result[item.Name] = param;
                }
            }

            // 返回转换集合
            return(result);
        }
        /// <summary>
        /// 创建一个 <see cref="DbParameter"/> 脚本查询参数对象。
        /// </summary>
        /// <param name="name">表示被加入的查询参数的参数名。</param>
        /// <param name="dbType">表示被加入的查询参数的参数数据类型。</param>
        /// <param name="size">参数长度。</param>
        /// <param name="direction">一个表示参数为输入还是输出类型的枚举值。</param>
        /// <param name="nullable">参数是否可为空(DBNull.Value)。</param>
        /// <param name="precision">表示查询参数的小数精度。</param>
        /// <param name="scale">表述参数的 Scale 属性。</param>
        /// <param name="sourceColumn">参数的源列名称,该源列映射到 <see cref="System.Data.DataSet"/> 并用于加载或返回 <seealso cref="System.Data.Common.DbParameter.Value"/>。</param>
        /// <param name="sourceVersion">指示参数在加载 <seealso cref="System.Data.Common.DbParameter.Value"/> 时使用的 <see cref="System.Data.DataRowVersion"/>。</param>
        /// <param name="value">表示被加入的查询参数的参数值。</param>
        /// <returns>一个 <see cref="DbParameter"/> 脚本查询参数对象。</returns>
        protected DbParameter CreateParameter(string name, DB2Type dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
        {
            DB2Parameter parameter = this.CreateParameter(name) as DB2Parameter;

            ConfigureParameter(parameter, name, dbType, size, direction, nullable, precision, scale, sourceColumn, sourceVersion, value);
            return(parameter);
        }
예제 #3
0
        public override IDbDataParameter CreateDbParameter(string parameterName)
        {
            IDbDataParameter parameter = new DB2Parameter();

            parameter.ParameterName = parameterName.Replace("?", "@").Replace(":", "@");
            return(parameter);
        }
예제 #4
0
        public void AddParameter(string name, DB2Type db2Type, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
        {
            DB2Parameter param = CreateParameter(name, DbType.AnsiString, size, direction, nullable, precision, scale, sourceColumn, sourceVersion, value);

            param.DB2Type = db2Type;
            this.command.Parameters.Add(param);
        }
예제 #5
0
        public int NonQuery(string sql, byte[] blob)
        {
            DB2Connection ncc = OpenConnection();
            DB2Command    com = new DB2Command(sql, ncc);

            try
            {
                DB2Parameter parm1 = new DB2Parameter();
                parm1.DbType        = DbType.Binary;
                parm1.ParameterName = "@blob";
                parm1.Value         = (byte[])blob;
                com.Parameters.Add(parm1);

                affectedRows = com.ExecuteNonQuery();

                HistorialSeguimientoTabla(TABLA_SEGUIR, sql);  //Almacenamiento historial de seguimiento a tabla.
            }
            catch (Exception e)
            {
                //AdministradorCarpetasRegistro.GrabarLogs(TipoRegistro.Error, sql, e, e.Message);
                //exceptions += e.Message + cambioLinea;
                affectedRows = 0;
            }
            finally
            {
                CloseConnection(ncc);
            }
            return(affectedRows);
        }
예제 #6
0
        public int ToRealDbType(DbType dbType, long length)
        {
            DB2Parameter prm = new DB2Parameter();

            prm.DbType        = dbType;
            prm.ParameterName = "name";
            return((int)prm.DB2Type);
        }
        public IDataParameter CreateParameter(string parameterName, DbType dbType, ParameterDirection parameterDirection)
        {
            IDataParameter p = new DB2Parameter(parameterName, GetDB2Type(dbType), GetDbSize(dbType))
            {
                Direction = parameterDirection
            };

            return(p);
        }
예제 #8
0
        ///// <summary>
        ///// 获取变量列表
        ///// </summary>
        //public ParamList BQLSelectParamList
        //{
        //    get
        //    {
        //        return new ParamList();
        //    }
        //}
        /// <summary>
        /// 获取参数类
        /// </summary>
        /// <param name="paramName">参数名</param>
        /// <param name="type">参数数据库类型</param>
        /// <param name="paramValue">参数值</param>
        /// <param name="paramDir">参数进出类型</param>
        /// <returns></returns>
        public IDataParameter GetDataParameter(string paramName, DbType type, object paramValue, ParameterDirection paramDir)
        {
            IDataParameter newParam = new DB2Parameter();

            newParam.ParameterName = paramName;
            newParam.DbType        = FormatDbType(type);
            newParam.Value         = FormatValue(paramValue);
            newParam.Direction     = paramDir;
            return(newParam);
        }
        private void tabControl1_Selected(object sender, TabControlEventArgs e)
        {
            // Move the input focus to the query builder.
            // This will fire Leave event in the text box and update the query builder
            // with modified query text.
            queryBuilder1.Focus();
            Application.DoEvents();


            // Try to execute the query using current database connection

            if (e.TabPage == tabPageData)
            {
                dataGridView1.DataSource = null;

                if (queryBuilder1.MetadataProvider != null && queryBuilder1.MetadataProvider.Connected)
                {
                    DB2Command command = (DB2Command)queryBuilder1.MetadataProvider.Connection.CreateCommand();
                    command.CommandText = queryBuilder1.SQL;

                    // handle the query parameters
                    if (queryBuilder1.Parameters.Count > 0)
                    {
                        for (int i = 0; i < queryBuilder1.Parameters.Count; i++)
                        {
                            if (!command.Parameters.Contains(queryBuilder1.Parameters[i].FullName))
                            {
                                DB2Parameter parameter = new DB2Parameter();
                                parameter.ParameterName = queryBuilder1.Parameters[i].FullName;
                                parameter.DbType        = queryBuilder1.Parameters[i].DataType;
                                command.Parameters.Add(parameter);
                            }
                        }

                        using (QueryParametersForm qpf = new QueryParametersForm(command))
                        {
                            qpf.ShowDialog();
                        }
                    }

                    DB2DataAdapter adapter = new DB2DataAdapter(command);
                    DataSet        dataset = new DataSet();

                    try
                    {
                        adapter.Fill(dataset, "QueryResult");
                        dataGridView1.DataSource = dataset.Tables["QueryResult"];
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "SQL query error");
                    }
                }
            }
        }
 /// <summary>
 /// 设置 <see cref="DB2Parameter"/> 参数对象的值。
 /// </summary>
 /// <param name="parameter">一个<see cref="DB2Parameter"/> 参数对象</param>
 /// <param name="name">表示被加入的查询参数的参数名。</param>
 /// <param name="dbType">表示被加入的查询参数的参数数据类型。</param>
 /// <param name="size">参数长度。</param>
 /// <param name="direction">一个表示参数为输入还是输出类型的枚举值。</param>
 /// <param name="nullable">参数是否可为空(DBNull.Value)。</param>
 /// <param name="precision">表示查询参数的小数精度。</param>
 /// <param name="scale">表述参数的 Scale 属性。</param>
 /// <param name="sourceColumn">参数的源列名称,该源列映射到 <see cref="System.Data.DataSet"/> 并用于加载或返回 <seealso cref="System.Data.Common.DbParameter.Value"/>。</param>
 /// <param name="sourceVersion">指示参数在加载 <seealso cref="System.Data.Common.DbParameter.Value"/> 时使用的 <see cref="System.Data.DataRowVersion"/>。</param>
 /// <param name="value">表示被加入的查询参数的参数值。</param>
 protected virtual void ConfigureParameter(DB2Parameter parameter, string name, DB2Type dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
 {
     parameter.DB2Type       = dbType;
     parameter.Size          = size;
     parameter.Value         = value ?? DBNull.Value;
     parameter.Direction     = direction;
     parameter.IsNullable    = nullable;
     parameter.Precision     = precision;
     parameter.Scale         = scale;
     parameter.SourceColumn  = sourceColumn;
     parameter.SourceVersion = sourceVersion;
 }
예제 #11
0
        public override DbDataAdapter GetAdapter(string selectCommand, DbConnection connection,
                                                 CommandParameterCollection parameters)
        {
            DB2DataAdapter adapter = new DB2DataAdapter(selectCommand, connection as DB2Connection);

            foreach (CommandParameter p in parameters)
            {
                DB2Parameter parameter = adapter.SelectCommand.Parameters.Add(p.Name, (DB2Type)p.DataType, p.Size);
                parameter.Value = p.Value;
            }
            return(adapter);
        }
예제 #12
0
 public override void Visit(DbConstantExpression expression)
 {
     if (_insertParametersValuesInSql)
     {
         _commandText.Append(VisitConstantExpression(expression));
     }
     else
     {
         DB2Parameter parameter = CreateParameter(expression.Value, expression.ResultType);
         _commandText.Append(parameter.ParameterName);
     }
 }
        public IDataParameter CreateParameter <TValue>(String parameterName, TValue paramValue,
                                                       ParameterDirection parameterDirection)
        {
            DB2Parameter p = Equals(null, paramValue)
                                 ? new DB2Parameter(
                ParameterNameForQueries(parameterName), DBNull.Value)
                                 : new DB2Parameter(
                ParameterNameForQueries(parameterName), paramValue);

            p.Direction = parameterDirection;
            return(p);
        }
예제 #14
0
        /// <summary>
        /// Add a parameter to the Sql Command
        /// </summary>
        /// <param name="name">Parameter name</param>
        /// <param name="value">Value for the parameter</param>
        /// <param name="dbType">Type of parameter in SQL Server</param>
        /// <param name="direction">Parameter direction (default is input)</param>
        public void AddParameter(string name, object value, DB2Type dbType, ParameterDirection direction = ParameterDirection.Input)
        {
            DB2Parameter parameter = new DB2Parameter();

            parameter.Direction     = direction;
            parameter.ParameterName = name;
            parameter.DB2Type       = dbType;
            parameter.Value         = value;
            if (!Parameters.Contains(parameter))
            {
                Parameters.Add(parameter);
            }
        }
예제 #15
0
        /// <summary>
        /// Returns a boolean indicating if the two parameters are equivalent
        /// (same direction, type, and value);  Out params are always false.
        /// </summary>
        /// <param name="param1">DbParameter1</param>
        /// <param name="param2">DbParameter2</param>
        /// <returns>true or false</returns>
        public override bool CompareParamEquality(DbParameter dbParam1, DbParameter dbParam2)
        {
            DB2Parameter db2Param1 = (DB2Parameter)dbParam1;
            DB2Parameter db2Param2 = (DB2Parameter)dbParam2;

            switch (db2Param1.DB2Type)
            {
            case DB2Type.SmallInt:
                return(Convert.ToInt16(db2Param1.Value) == Convert.ToInt16(db2Param2.Value));

            case DB2Type.Integer:
                return(Convert.ToInt32(db2Param1.Value) == Convert.ToInt32(db2Param2.Value));

            case DB2Type.BigInt:
                return(Convert.ToInt64(db2Param1.Value) == Convert.ToInt64(db2Param2.Value));

            case DB2Type.Decimal:
            case DB2Type.Numeric:
                return(Convert.ToDecimal(db2Param1.Value) == Convert.ToDecimal(db2Param2.Value));

            case DB2Type.Real:
            case DB2Type.Real370:
                return(Convert.ToSingle(db2Param1.Value) == Convert.ToSingle(db2Param2.Value));

            case DB2Type.Time:
            case DB2Type.DecimalFloat:
            case DB2Type.Double:
            case DB2Type.Float:
                return(Convert.ToDouble(db2Param1.Value) == Convert.ToDouble(db2Param2.Value));

            case DB2Type.Char:
            case DB2Type.Clob:
            case DB2Type.VarChar:
            case DB2Type.Xml:
            case DB2Type.Graphic:
            case DB2Type.VarGraphic:
            case DB2Type.LongVarChar:
            case DB2Type.LongVarGraphic:
            case DB2Type.DbClob:
            case DB2Type.RowId:
                return(db2Param1.Value.ToString().ToLower() == db2Param2.Value.ToString().ToLower());

            case DB2Type.Date:
            case DB2Type.Timestamp:
            case DB2Type.TimeStampWithTimeZone:
                return(Convert.ToDateTime(db2Param1.Value) == Convert.ToDateTime(db2Param2.Value));

            default:
                return(db2Param1.Value == db2Param2.Value);
            }
        }
예제 #16
0
        private Dictionary <string, DbParameterAccessor> ReadIntoParams(String[] queryParameters, String query, String addPrefix)
        {
            DbCommand dc = CurrentConnection.CreateCommand();

            dc.Transaction = CurrentTransaction;
            dc.CommandText = query;
            dc.CommandType = CommandType.Text;
            for (int i = 0; i < queryParameters.Length; i++)
            {
                AddInput(dc, i.ToString(), queryParameters[i].ToLower());
            }
            DbDataReader reader = dc.ExecuteReader();
            Dictionary <String, DbParameterAccessor>
                allParams = new Dictionary <string, DbParameterAccessor>();
            int position  = 0;

            while (reader.Read())
            {
                String       paramName = (reader.IsDBNull(0)) ? null : reader.GetString(0).ToUpper();
                String       dataType  = reader.GetString(1);
                int          length    = (reader.IsDBNull(2)) ? 0 : reader.GetInt32(2);
                String       direction = reader.GetString(3);
                DB2Parameter dp        = new DB2Parameter();
                dp.Direction = GetParameterDirection(direction);
                if (paramName != null)
                {
                    dp.ParameterName = addPrefix + paramName; dp.SourceColumn = paramName;
                }
                else
                {
                    dp.Direction = ParameterDirection.ReturnValue;
                }

                dp.DB2Type = GetDBType(dataType);
                if (length > 0)
                {
                    dp.Size = length;
                }
                else
                {
                    if (!ParameterDirection.Input.Equals(dp.Direction) || typeof(String).Equals(GetDotNetType(dataType)))
                    {
                        dp.Size = 4000;
                    }
                }
                allParams[NameNormaliser.NormaliseName(paramName)] =
                    new DbParameterAccessor(dp, GetDotNetType(dataType), position++, dataType);
            }
            return(allParams);
        }
예제 #17
0
        public int InputBlob(string strSql, byte[] ImageData)
        {
            DB2Command command = null;

            command             = new DB2Command();
            command.Connection  = this.dbConnection as DB2Connection;
            command.Transaction = dbTrans as DB2Transaction;
            command.CommandType = System.Data.CommandType.Text;
            command.Parameters.Clear();
            command.CommandText = strSql + "";

            string strParam = "";
            int    i        = strSql.IndexOf(":", 0);

            if (i <= 0)
            {
                this.Err = "未指定参数!" + strSql;
                this.WriteErr();
                return(-1);
            }
            //strParam = strSql.Substring(i + 1, 1);
            //{F94ACBC1-D0D1-4f70-AED8-8045E4062EF3}
            strParam = strSql.Substring(i, 2);
            DB2Parameter param = command.Parameters.Add(strParam, DB2Type.Blob);

            param.Direction = System.Data.ParameterDirection.Input;

            // Assign Byte Array to Oracle Parameter
            param.Value = ImageData;
            try
            {
                command.ExecuteNonQuery();
            }
            catch (DB2Exception ex)
            {
                this.Err       = "执行产生错误!" + ex.Message;
                this.ErrCode   = strSql;
                this.DBErrCode = ex.ErrorCode;
                this.WriteErr();
                return(-1);
            }
            catch (Exception ex)
            {
                this.Err = ex.Message;
                this.WriteErr();
                return(-1);
            }

            return(0);
        }
예제 #18
0
        public int NonQuery(string sql, byte[] blob)
        {
            DB2Command com = new DB2Command(sql, connection);

            DB2Parameter parm1 = new DB2Parameter();

            parm1.DbType        = DbType.Binary;
            parm1.ParameterName = "@blob";
            parm1.Value         = (byte[])blob;

            com.Parameters.Add(parm1);

            return(com.ExecuteNonQuery());
        }
        /// <summary>
        /// Creates a DB2Parameter given a name, type, and direction
        /// </summary>
        internal static DB2Parameter CreateDB2Parameter(string name, TypeUsage type, ParameterMode mode, object value)
        {
            int?size;

            if (type.GetPrimitiveTypeKind() == PrimitiveTypeKind.Guid)
            {
                type = TypeUsage.CreateStringTypeUsage(
                    PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String),
                    false, true);
            }

            DB2Parameter result = new DB2Parameter(name, value);

            // .Direction
            ParameterDirection direction = MetadataHelpers.ParameterModeToParameterDirection(mode);

            if (result.Direction != direction)
            {
                result.Direction = direction;
            }

            // .Size and .DbType
            // output parameters are handled differently (we need to ensure there is space for return
            // values where the user has not given a specific Size/MaxLength)
            bool   isOutParam = mode != ParameterMode.In;
            DbType sqlDbType  = GetDB2DbType(type, isOutParam, out size);

            if (result.DbType != sqlDbType)
            {
                result.DbType = sqlDbType;
            }

            // Note that we overwrite 'facet' parameters where either the value is different or
            // there is an output parameter.
            if (size.HasValue && (isOutParam || result.Size != size.Value))
            {
                result.Size = size.Value;
            }

            // .IsNullable
            bool isNullable = type.GetIsNullable();

            if (isOutParam || isNullable != result.IsNullable)
            {
                result.IsNullable = isNullable;
            }

            return(result);
        }
예제 #20
0
 /// <summary>
 /// Please refer to the documentation of <see cref="GentleSqlFactory"/> for details.
 /// </summary>
 public override void AddParameter(IDbCommand cmd, string name, long dbType)
 {
     try
     {
         DB2Command   myc   = (DB2Command)cmd;
         DB2Parameter param = new DB2Parameter(name, (DB2Type)dbType);
         param.Direction = ParameterDirection.Input;
         myc.Parameters.Add(param);
     }
     catch (Exception e)
     {
         Check.Fail(Error.Unspecified, e.Message);
         throw new GentleException(Error.Unspecified, "Unreachable code.");
     }
 }
예제 #21
0
        /// <summary>
        /// Returns a copy of the given DbParameter that was added to the given collection.
        /// </summary>
        /// <param name="dbParameters">A DbParameter collection to add the parameter clone to</param>
        /// <param name="dbParam">A DbParameter to clone</param>
        /// <returns>The DbParameter clone</returns>
        public override DbParameter CopyParameterToCollection(DbParameterCollection dbParameters
                                                              , DbParameter dbParam)
        {
            DB2ParameterCollection db2Parameters = (DB2ParameterCollection)dbParameters;
            DB2Parameter           db2Param      = (DB2Parameter)dbParam;

            if (db2Parameters.Contains(db2Param.ParameterName))
            {
                throw new ExceptionEvent(enumExceptionEventCodes.DbParameterExistsInCollection
                                         , string.Format("Parameter {0} already belongs to this collection; use Set to change value."
                                                         , db2Param.ParameterName));
            }
            db2Parameters.Add(CloneParameter(db2Param));
            return(db2Parameters[db2Param.ParameterName]);
        }
예제 #22
0
        private static DB2Parameter ValidateParam(DB2Parameter dbParam, Int32 size, DbType dbType)
        {
            if (dbParam.Direction == ParameterDirection.InputOutput ||
                dbParam.Direction == ParameterDirection.Output)
            {
                dbParam.Size = size;
            }

            if (dbParam.Value == null)
            {
                dbParam.Value  = DBNull.Value;
                dbParam.DbType = dbType;
            }
            return(dbParam);
        }
예제 #23
0
        /// <summary>
        /// Clones a parameter so that it can be used with another command.
        /// </summary>
        /// <param name="command">The command to use.</param>
        /// <param name="parameter">The parameter to clone.</param>
        /// <returns>The clone.</returns>
        public override IDataParameter CloneParameter(IDbCommand command, IDataParameter parameter)
        {
            DB2Parameter p    = (DB2Parameter)base.CloneParameter(command, parameter);
            DB2Parameter db2p = (DB2Parameter)parameter;

            p.ArrayLength       = db2p.ArrayLength;
            p.DB2Type           = db2p.DB2Type;
            p.DB2TypeOutput     = db2p.DB2TypeOutput;
            p.InternalProperty1 = db2p.InternalProperty1;
            p.IsDefault         = db2p.IsDefault;
            p.IsUnassigned      = db2p.IsUnassigned;
            p.Precision         = db2p.Precision;
            p.Scale             = db2p.Scale;

            return(p);
        }
예제 #24
0
        /// <summary>
        /// <para>Sets the value of a parameter for the given <paramref name="name"/>.</para>
        /// </summary>
        /// <param name="name"><para>The name of the parameter to set the value.</para></param>
        /// <param name="value"><para>The new value of the parameter.</para></param>
        public override void SetParameterValue(string name, object value)
        {
            DB2Parameter parameter = command.Parameters[BuildParameterName(name)];

            if (value is Guid)
            {
                parameter.Value = ((Guid)value).ToByteArray();
            }
            string tmpVal = value as string;

            if ((tmpVal != null) && (tmpVal.Length == 0))
            {
                parameter.Value = Convert.DBNull;
            }
            parameter.Value = (value == null) ? DBNull.Value : value;
        }
예제 #25
0
파일: IBMDB2.cs 프로젝트: radtek/FmsScript
        /// <summary>
        /// 从DataTable导入数据到数据库表(适用于小批量数据导入)
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="dt">数据表(字段名通过ColumnName来指定)</param>
        /// <returns></returns>
        public override int LoadDataInDataTable(string tableName, DataTable dt)
        {
            Log.BLog.Write(Log.BLog.LogLevel.DEBUG, "00");
            if (dt == null || dt.Rows.Count < 1)
            {
                return(0);
            }
            int           rowsCount   = dt.Rows.Count;
            int           colsCount   = dt.Columns.Count;
            List <string> columnNames = new List <string>();

            //行列转换
            object[][] allData = new object[colsCount][];
            for (int col = 0; col < colsCount; col++)
            {
                allData[col] = new object[rowsCount];
                columnNames.Add(dt.Columns[col].ColumnName);
            }
            for (int row = 0; row < rowsCount; row++)
            {
                for (int col = 0; col < colsCount; col++)
                {
                    allData[col][row] = dt.Rows[row][col];
                }
            }
            DB2Command command = _conn.CreateCommand();

            command.CommandTimeout = base.CommandTimeout;
            command.CommandType    = CommandType.Text;
            command.ArrayBindCount = rowsCount;
            command.CommandText    = string.Format("INSERT INTO {0} ({1}) VALUES({2})", tableName, string.Join(", ", columnNames), "@" + string.Join(", @", columnNames));
            int colIndex = 0;
            Dictionary <string, int> dicMaxLength = GetColumnsMaxLength(dt);

            foreach (DataColumn col in dt.Columns)
            {
                int maxLength = 0;
                dicMaxLength.TryGetValue(col.ColumnName, out maxLength);
                DB2Type      type         = GetDbType(dt, col, maxLength);
                DB2Parameter colParameter = new DB2Parameter(col.ColumnName, type);
                colParameter.Direction = ParameterDirection.Input;
                colParameter.Value     = allData[colIndex];
                command.Parameters.Add(colParameter);
                colIndex++;
            }
            return(command.ExecuteNonQuery());
        }
        protected override string InsertClause(IDbCommand cmd)
        {
            List <string> sets = new List <string>();

            //Columnnames
            DataColumnCollection dcc = GetSchemaTable().Columns;

            foreach (DataColumn dc in dcc)
            {
                sets.Add(string.Format(" \"{0}\"", dc.ColumnName));
            }

            String columNames = string.Format("({0}, \"{1}\")", String.Join(",", sets.ToArray()).Trim(), GeometryColumn);

            sets.Clear();

            //Parameter
            foreach (DataColumn dc in dcc)
            {
                IDataParameter param = null;
                sets.Add(string.Format("{0}", ParamForColumn(dc, out param)));

                DB2Parameter par = param as DB2Parameter;
                switch (par.DB2Type)
                {
                case DB2Type.VarChar:
                    sets[sets.Count - 1] = string.Format("CAST({0} AS VARCHAR(250))", par.ParameterName);
                    break;

                default:
                    break;
                }
                cmd.Parameters.Add(param);
            }

            //Geometry
            sets.Add(string.Format(GeomFromWkbFormatString, "@PGeo"));
            //    string.Format("CAST(@PGeo AS {0}.{1})",
            //        TableSchema,
            //        DB2SpatialExtenderProviderStatic.ToDb2GeometryType(_validGeometryType))
            //)));

            //cmd.Parameters.Add(DbUtility.CreateParameterByType("PGeo", toDbType(typeof(byte[])), ParameterDirection.Input));
            cmd.Parameters.Add(DbUtility.CreateParameter <byte[]>("@PGeo", ParameterDirection.Input));
            return(String.Format("{0} VALUES({1})", columNames, string.Join(",", sets.ToArray()).Trim()));
        }
예제 #27
0
        private void DisplayDataForQuery()
        {
            dataGridView1.DataSource = null;

            if (queryBuilder.MetadataProvider != null && queryBuilder.MetadataProvider.Connected)
            {
                if (queryBuilder.MetadataProvider is DB2MetadataProvider)
                {
                    DB2Command command = (DB2Command)queryBuilder.MetadataProvider.Connection.CreateCommand();
                    command.CommandText = queryBuilder.SQL;

                    // handle the query parameters
                    if (queryBuilder.Parameters.Count > 0)
                    {
                        for (int i = 0; i < queryBuilder.Parameters.Count; i++)
                        {
                            if (!command.Parameters.Contains(queryBuilder.Parameters[i].FullName))
                            {
                                DB2Parameter parameter = new DB2Parameter();
                                parameter.ParameterName = queryBuilder.Parameters[i].FullName;
                                parameter.DbType        = queryBuilder.Parameters[i].DataType;
                                command.Parameters.Add(parameter);
                            }
                        }

                        using (QueryParametersForm qpf = new QueryParametersForm(command))
                        {
                            qpf.ShowDialog();
                        }
                    }

                    DB2DataAdapter adapter = new DB2DataAdapter(command);
                    DataSet        dataset = new DataSet();

                    try
                    {
                        adapter.Fill(dataset, "QueryResult");
                        dataGridView1.DataSource = dataset.Tables["QueryResult"];
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "SQL query error");
                    }
                } //end db2
            }     //end check if connected
        }         //end method
예제 #28
0
        private static void SetOutValueInternal <TKey>(this DB2ParametersWrapper <TKey> paramWrapper, TKey key, TypeCode typeCode)
        {
            var p = new DB2Parameter
            {
                Direction     = ParameterDirection.Output,
                ParameterName = "@par_" + key
            };

            switch (typeCode)
            {
            case TypeCode.Int16:
                p.DB2Type = DB2Type.SmallInt;
                break;

            case TypeCode.Int32:
                p.DB2Type = DB2Type.Integer;
                break;

            case TypeCode.Int64:
                p.DB2Type = DB2Type.Int8;
                break;

            case TypeCode.Decimal:
                p.DB2Type = DB2Type.Decimal;
                break;

            case TypeCode.Double:
                p.DB2Type = DB2Type.Double;
                break;

            case TypeCode.String:
                p.DB2Type = DB2Type.VarChar;
                break;

            case TypeCode.DateTime:
                p.DB2Type = DB2Type.Date;
                break;

            default:
                throw new ArgumentException("Error to map specified type to an DB2Type.");
            }

            paramWrapper[key] = p;
        }
예제 #29
0
 public override void PrepareCommand(System.Data.IDbCommand cmd, System.Data.IDbConnection conn, string cmdText, CmdParameterCollection cmdParms)
 {
     cmd.Connection     = _conn;
     cmd.CommandText    = cmdText;
     cmd.Transaction    = Trans;
     cmd.CommandTimeout = 600;
     cmd.CommandType    = CommandType.Text;
     if (cmdParms != null)
     {
         foreach (CmdParameter param in cmdParms)
         {
             DB2Parameter paras = new DB2Parameter(param.Name, param.Value);
             paras.Direction = param.Direction;
             paras.Size      = param.Size;
             paras.DbType    = param.DbType;
             cmd.Parameters.Add(paras);
         }
     }
 }
예제 #30
0
        public IDbDataParameter MakeParam(string parameterName, object parameterValue, DbType dbType, int parameterSize, ParameterDirection parameterDirection)
        {
            DB2Parameter parameter;

            if (parameterSize > 0)
            {
                parameter = new DB2Parameter(parameterName, (DB2Type)dbType, parameterSize);
            }
            else
            {
                parameter = new DB2Parameter(parameterName, (DB2Type)dbType);
            }
            parameter.Direction = parameterDirection;
            if ((parameterDirection != ParameterDirection.Output) || (parameterValue != null))
            {
                parameter.Value = parameterValue;
            }
            return(parameter);
        }
예제 #31
0
        /// <summary>
        /// 获取参数
        /// </summary>
        /// <param name="paramName">参数名</param>
        /// <param name="dbType">数据类型</param>
        /// <param name="size">长度</param>
        /// <param name="direction">参数类型</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        public IDbDataParameter MakeParameter(string parameterName, object parameterValue, DbType dbType, Int32 parameterSize, ParameterDirection parameterDirection)
        {
            DB2Parameter parameter;

            if (parameterSize > 0)
            {
                parameter = new DB2Parameter(parameterName, (DB2Type)dbType, parameterSize);
            }
            else
            {
                parameter = new DB2Parameter(parameterName, (DB2Type)dbType);
            }

            parameter.Direction = parameterDirection;
            if (!(parameterDirection == ParameterDirection.Output && parameterValue == null))
            {
                parameter.Value = parameterValue;
            }

            return parameter;
        }