Пример #1
0
        public static MethodParameterMap MapToParameterColumnMap(ListViewItem aItem, MapedObject aMap, String methodName, int parameterCount, bool ruleBased, Guid id)
        {
            ParameterColumnMap aPair = new ParameterColumnMap();

            if (!ruleBased)
            {
                aPair.ColumnName = aItem.SubItems[0].Text;
            }
            else
            {
                aPair.ColumnName = aItem.SubItems[1].Text;
            }
            aPair.RuleBased     = ruleBased;
            aPair.ParameterName = aItem.SubItems[1].Text;
            aPair.DataType      = aItem.SubItems[2].Text;
            aPair.IsNullable    = bool.Parse(aItem.SubItems[4].Text);
            return(AddParameterMap(aMap, aPair, methodName, id, parameterCount));
        }
Пример #2
0
        public static void DeriveParameters(SqlCommand cmdToPopulate)
        {
            AssertCommandIsValid(cmdToPopulate, "DeriveParameters");
            AssertConnectionIsValid(cmdToPopulate);

            var newParameters = new List <SqlParameter>();

            var procToPopulateName   = new SqlObjectName(cmdToPopulate.CommandText);
            var parameterRequestProc = new SqlObjectName(procToPopulateName.Database, "sys", "sp_procedure_params_100_managed");

            var parameterRequestCmd = new SqlCommand(parameterRequestProc.Name, cmdToPopulate.Connection, cmdToPopulate.Transaction);

            parameterRequestCmd.CommandType = CommandType.StoredProcedure;
            parameterRequestCmd.Parameters.Add(CreateNVarCharParameter("@procedure_name", procToPopulateName.Name));

            if (!procToPopulateName.Schema.IsNullOrWhiteSpace())
            {
                parameterRequestCmd.Parameters.Add(CreateNVarCharParameter("@procedure_schema", procToPopulateName.Schema));
            }

            using (SqlDataReader parameterReader = parameterRequestCmd.ExecuteReader())
            {
                var columnMap = new ParameterColumnMap(parameterReader);

                while (parameterReader.Read())
                {
                    SqlParameter parameter = CreateParameter(parameterReader, columnMap);
                    newParameters.Add(parameter);
                }
            }

            if (newParameters.Count == 0)
            {
                throw new InvalidOperationException($"The stored procedure '{cmdToPopulate.CommandText}' doesn't exist.");
            }

            cmdToPopulate.Parameters.Clear();
            cmdToPopulate.Parameters.AddRange(newParameters.ToArray());
        }
Пример #3
0
        private static SqlParameter CreateParameter(SqlDataReader reader, ParameterColumnMap columnMap)
        {
            SqlParameter parameter = new SqlParameter();

            parameter.ParameterName = reader.GetString(columnMap.ParamName);

            int managedTypeId = reader.GetInt16(columnMap.ParamDataTypeNum);

            parameter.SqlDbType = GetSqlDbTypeEnumFromManagedTypeId(managedTypeId);

            string sqlDbTypeName = reader.GetString(columnMap.TypeName);

            if (sqlDbTypeName == null)               // Fixes unit test issue where simple UDT's have a null type (Insight fixes the null later)
            {
                parameter.SqlDbType = SqlDbType.Udt; // Set the type to UDT so insight knows its a UDT
            }
            parameter.Direction = GetParameterDirection(reader.GetInt16(columnMap.ParamDirType));

            object charLengthObj = reader[columnMap.Length];

            if (charLengthObj is int)
            {
                int charLength = (int)charLengthObj;

                // Sql sometimes returns zero rather than -1, so fix it (it failed output parameters unit tests)
                if (charLength == 0 && (parameter.SqlDbType == SqlDbType.NVarChar || parameter.SqlDbType == SqlDbType.VarBinary ||
                                        parameter.SqlDbType == SqlDbType.VarChar))
                {
                    charLength = -1;
                }

                parameter.Size = charLength;
            }

            if (parameter.SqlDbType == SqlDbType.Decimal)
            {
                parameter.Scale     = (byte)reader.GetInt16(columnMap.Scale);
                parameter.Precision = (byte)reader.GetInt16(columnMap.Precision);
            }

            if (parameter.SqlDbType == SqlDbType.Structured)
            {
                parameter.TypeName = reader.GetString(columnMap.TypeCatalogName) + "." +
                                     reader.GetString(columnMap.TypeSchemaName) + "." +
                                     reader.GetString(columnMap.TypeName);
            }

#if !NO_UDT
            if (parameter.SqlDbType == SqlDbType.Udt)
            {
                parameter.UdtTypeName = reader.GetString(columnMap.TypeCatalogName) + "." +
                                        reader.GetString(columnMap.TypeSchemaName) + "." +
                                        reader.GetString(columnMap.TypeName);
            }
#endif

            if (parameter.SqlDbType == SqlDbType.Xml)
            {
                parameter.XmlSchemaCollectionDatabase     = ReadDbNullStringSafely(reader, columnMap.XmlCatalogName);
                parameter.XmlSchemaCollectionOwningSchema = ReadDbNullStringSafely(reader, columnMap.XmlSchemaName);
                parameter.XmlSchemaCollectionName         = ReadDbNullStringSafely(reader, columnMap.XmlCollectionName);
            }

            if ((parameter.SqlDbType == SqlDbType.DateTime2 || parameter.SqlDbType == SqlDbType.Time ||
                 parameter.SqlDbType == SqlDbType.DateTimeOffset))
            {
                object value = reader.GetValue(columnMap.DateTimePrecision);
                if (value is int)
                {
                    parameter.Scale = (byte)(((int)value) & 0xff);
                }
            }

            return(parameter);
        }
        private void AddToMapList(ParameterColumnMap aMap)
        {
            var newPair = new ListViewItem(new string[] { aMap.ColumnName, aMap.ParameterName, aMap.DataType, aMap.IsNullable.ToString(), aMap.IsNullable.ToString() });

            lstMappedPairs.Items.Add(newPair);
        }