示例#1
0
        void ProcessRawQuery()
        {
            _queries.Clear();
            switch (CommandType)
            {
            case CommandType.Text:
                SqlQueryParser.ParseRawQuery(CommandText, _connection == null || _connection.UseConformantStrings, _parameters, _queries);
                if (_queries.Count > 1 && _parameters.Any(p => p.IsOutputDirection))
                {
                    throw new NotSupportedException("Commands with multiple queries cannot have out parameters");
                }
                break;

            case CommandType.TableDirect:
                _queries.Add(new NpgsqlStatement("SELECT * FROM " + CommandText, new List <NpgsqlParameter>()));
                break;

            case CommandType.StoredProcedure:
                var numInput = _parameters.Count(p => p.IsInputDirection);
                var sb       = new StringBuilder();
                sb.Append("SELECT * FROM ");
                sb.Append(CommandText);
                sb.Append('(');
                for (var i = 1; i <= numInput; i++)
                {
                    sb.Append('$');
                    sb.Append(i);
                    if (i < numInput)
                    {
                        sb.Append(',');
                    }
                }
                sb.Append(')');
                _queries.Add(new NpgsqlStatement(sb.ToString(), _parameters.Where(p => p.IsInputDirection).ToList()));
                break;

            default:
                throw PGUtil.ThrowIfReached();
            }
        }