コード例 #1
0
        private void CreateParametersForTextCommand()
        {
            string str = string.Empty;
            string parameterDbTypeProperty         = this._session.DataSource.DbProvider.ParameterDbTypeProperty;
            Type   parameterDbType                 = this._session.DataSource.DbProvider.ParameterDbType;
            ParameterPropertyCollection properties = null;

            if (this._session.DataSource.DbProvider.UsePositionalParameters)
            {
                properties = this._request.ParameterMap.Properties;
            }
            else
            {
                properties = this._request.ParameterMap.PropertiesList;
            }
            this._preparedStatement.DbParameters = new IDbDataParameter[properties.Count];
            for (int i = 0; i < properties.Count; i++)
            {
                ParameterProperty key = properties[i];
                if (this._session.DataSource.DbProvider.UseParameterPrefixInParameter)
                {
                    str = this._parameterPrefix + "param" + i;
                }
                else
                {
                    str = "param" + i;
                }
                IDbDataParameter parameter = this._session.CreateDataParameter();
                if ((key.DbType != null) && (key.DbType.Length > 0))
                {
                    object memberValue = Enum.Parse(parameterDbType, key.DbType, true);
                    ObjectProbe.SetMemberValue(parameter, parameterDbTypeProperty, memberValue, this._request.DataExchangeFactory.ObjectFactory, this._request.DataExchangeFactory.AccessorFactory);
                }
                if (this._session.DataSource.DbProvider.SetDbParameterSize && (key.Size != -1))
                {
                    parameter.Size = key.Size;
                }
                if (this._session.DataSource.DbProvider.SetDbParameterPrecision)
                {
                    parameter.Precision = key.Precision;
                }
                if (this._session.DataSource.DbProvider.SetDbParameterScale)
                {
                    parameter.Scale = key.Scale;
                }
                parameter.Direction     = key.Direction;
                parameter.ParameterName = str;
                this._preparedStatement.DbParametersName.Add(key.PropertyName);
                this._preparedStatement.DbParameters[i] = parameter;
                if (!this._session.DataSource.DbProvider.UsePositionalParameters)
                {
                    this._propertyDbParameterMap.Add(key, parameter);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Create IDataParameters for procedure statement.
        /// </summary>
        private void CreateParametersForProcedureCommand()
        {
            string sqlParamName              = string.Empty;
            string dbTypePropertyName        = _session.DataSource.DbProvider.ParameterDbTypeProperty;
            Type   enumDbType                = _session.DataSource.DbProvider.ParameterDbType;
            ParameterPropertyCollection list = null;

            if (_session.DataSource.DbProvider.UsePositionalParameters)             //obdc/oledb
            {
                list = _request.ParameterMap.Properties;
            }
            else
            {
                list = _request.ParameterMap.PropertiesList;
            }

            _preparedStatement.DbParameters = new IDbDataParameter[list.Count];

            // ParemeterMap are required for procedure and we tested existance in Prepare() method
            // so we don't have to test existence here.
            // A ParameterMap used in CreateParametersForProcedureText must
            // have property and column attributes set.
            // The column attribute is the name of a procedure parameter.
            for (int i = 0; i < list.Count; i++)
            {
                ParameterProperty property = list[i];

                if (_session.DataSource.DbProvider.UseParameterPrefixInParameter)
                {
                    sqlParamName = _parameterPrefix + property.ColumnName;
                }
                else                 //obdc/oledb
                {
                    sqlParamName = property.ColumnName;
                }

                IDbDataParameter dataParameter = _session.CreateCommand(_statement.CommandType).CreateParameter();

                // Manage dbType attribute if any
                if (property.DbType != null && property.DbType.Length > 0)
                {
                    // Exemple : Enum.parse(System.Data.SqlDbType, 'VarChar')
                    object dbType = Enum.Parse(enumDbType, property.DbType, true);

                    // Exemple : ObjectHelper.SetProperty(sqlparameter, 'SqlDbType', SqlDbType.Int);
                    ObjectProbe.SetMemberValue(dataParameter, dbTypePropertyName, dbType,
                                               _request.DataExchangeFactory.ObjectFactory,
                                               _request.DataExchangeFactory.AccessorFactory);
                }

                // Set IDbDataParameter
                // JIRA-49 Fixes (size, precision, and scale)
                if (_session.DataSource.DbProvider.SetDbParameterSize)
                {
                    if (property.Size != -1)
                    {
                        dataParameter.Size = property.Size;
                    }
                }

                if (_session.DataSource.DbProvider.SetDbParameterPrecision)
                {
                    dataParameter.Precision = property.Precision;
                }

                if (_session.DataSource.DbProvider.SetDbParameterScale)
                {
                    dataParameter.Scale = property.Scale;
                }

                // Set as direction parameter
                dataParameter.Direction = property.Direction;

                dataParameter.ParameterName = sqlParamName;

                _preparedStatement.DbParametersName.Add(property.PropertyName);
                _preparedStatement.DbParameters[i] = dataParameter;

                if (_session.DataSource.DbProvider.UsePositionalParameters == false)
                {
                    _propertyDbParameterMap.Add(property, dataParameter);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Create IDataParameters for command text statement.
        /// </summary>
        private void CreateParametersForTextCommand()
        {
            string sqlParamName              = string.Empty;
            string dbTypePropertyName        = _session.DataSource.DbProvider.ParameterDbTypeProperty;
            Type   enumDbType                = _session.DataSource.DbProvider.ParameterDbType;
            ParameterPropertyCollection list = null;

            if (_session.DataSource.DbProvider.UsePositionalParameters)             //obdc/oledb
            {
                list = _request.ParameterMap.Properties;
            }
            else
            {
                list = _request.ParameterMap.PropertiesList;
            }

            _preparedStatement.DbParameters = new IDbDataParameter[list.Count];

            for (int i = 0; i < list.Count; i++)
            {
                ParameterProperty property = list[i];

                if (_session.DataSource.DbProvider.UseParameterPrefixInParameter)
                {
                    // From Ryan Yao: JIRA-27, used "param" + i++ for sqlParamName
                    sqlParamName = _parameterPrefix + "param" + i;
                }
                else
                {
                    sqlParamName = "param" + i;
                }

                IDbDataParameter dataParameter = _session.CreateDataParameter();

                // Manage dbType attribute if any
                if (property.DbType != null && property.DbType.Length > 0)
                {
                    // Exemple : Enum.parse(System.Data.SqlDbType, 'VarChar')
                    object dbType = Enum.Parse(enumDbType, property.DbType, true);

                    // Exemple : ObjectHelper.SetProperty(sqlparameter, 'SqlDbType', SqlDbType.Int);
                    ObjectProbe.SetMemberValue(dataParameter, dbTypePropertyName, dbType,
                                               _request.DataExchangeFactory.ObjectFactory,
                                               _request.DataExchangeFactory.AccessorFactory);
                }

                // Set IDbDataParameter
                // JIRA-49 Fixes (size, precision, and scale)
                if (_session.DataSource.DbProvider.SetDbParameterSize)
                {
                    if (property.Size != -1)
                    {
                        dataParameter.Size = property.Size;
                    }
                }

                if (_session.DataSource.DbProvider.SetDbParameterPrecision)
                {
                    dataParameter.Precision = property.Precision;
                }

                if (_session.DataSource.DbProvider.SetDbParameterScale)
                {
                    dataParameter.Scale = property.Scale;
                }

                // Set as direction parameter
                dataParameter.Direction = property.Direction;

                dataParameter.ParameterName = sqlParamName;

                _preparedStatement.DbParametersName.Add(property.PropertyName);
                _preparedStatement.DbParameters[i] = dataParameter;

                if (_session.DataSource.DbProvider.UsePositionalParameters == false)
                {
                    _propertyDbParameterMap.Add(property, dataParameter);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Create IDataParameters for command text statement.
        /// </summary>
        private void CreateParametersForTextCommand()
        {
            string sqlParamName = string.Empty;
            //dbTypePropertyName来源于providers.config配置文件中的属性值 如:SqlDbType
            string dbTypePropertyName = dbProvider.ParameterDbTypeProperty;
            //由属性parameterDbTypeClass值分析而来 如:System.Data.SqlDbType
            Type enumDbType = dbProvider.ParameterDbType;
            ParameterPropertyCollection list = null;

            //获取参数列表
            if (dbProvider.UsePositionalParameters) //obdc/oledb
            {
                list = request.ParameterMap.Properties;
            }
            else
            {
                list = request.ParameterMap.PropertiesList;
            }

            preparedStatement.DbParameters = new IDbDataParameter[list.Count];

            for (int i = 0; i < list.Count; i++)
            {
                ParameterProperty property = list[i];

                if (dbProvider.UseParameterPrefixInParameter)
                {
                    // From Ryan Yao: JIRA-27, used "param" + i++ for sqlParamName
                    sqlParamName = parameterPrefix + "param" + i;
                }
                else
                {
                    sqlParamName = "param" + i;
                }

                IDbDataParameter dataParameter = dbProvider.CreateDataParameter();

                // Manage dbType attribute if any
                //此处的DbType是节点属性配置的对应数据库中的类型
                if (!string.IsNullOrEmpty(property.DbType))
                {
                    // Exemple : Enum.parse(System.Data.SqlDbType, 'VarChar')
                    //此处应该是Property.DbType数据类型到数据库类型enumDbType的转变
                    object dbType = Enum.Parse(enumDbType, property.DbType, true);

                    // Exemple : ObjectHelper.SetProperty(sqlparameter, 'SqlDbType', SqlDbType.Int);
                    //此处应该是为dataParameter中的dbTypePropertyName设置值为dbtype
                    ObjectProbe.SetMemberValue(dataParameter, dbTypePropertyName, dbType,
                                               request.DataExchangeFactory.ObjectFactory,
                                               request.DataExchangeFactory.AccessorFactory);
                }

                // Set IDbDataParameter
                // JIRA-49 Fixes (size, precision, and scale)
                if (dbProvider.SetDbParameterSize)
                {
                    if (property.Size != -1)
                    {
                        dataParameter.Size = property.Size;
                    }
                }

                if (dbProvider.SetDbParameterPrecision)
                {
                    dataParameter.Precision = property.Precision;
                }
                if (dbProvider.SetDbParameterScale)
                {
                    dataParameter.Scale = property.Scale;
                }

                // Set as direction parameter
                dataParameter.Direction = property.Direction;

                dataParameter.ParameterName = sqlParamName;

                //将参数数名与参数信息对应保存
                preparedStatement.DbParametersName.Add(property.PropertyName);
                preparedStatement.DbParameters[i] = dataParameter;

                if (dbProvider.UsePositionalParameters == false)
                {
                    propertyDbParameterMap.Add(property, dataParameter);
                }
            }
        }