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); } } }
/// <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); } } }
/// <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); } } }
/// <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); } } }