Beispiel #1
0
        public AboutViewModel About()
        {
            var dbConfiguration = DatabaseExtensions.GetDatabaseConfiguration();
            var storage         = StartupSingleton.Instance;
            var model           = new AboutViewModel
            {
                FrameworkDescription = RuntimeInformation.FrameworkDescription,
                OsArchitecture       = RuntimeInformation.OSArchitecture.ToString(),
                OsDescription        = RuntimeInformation.OSDescription,
                ProcessArchitecture  = RuntimeInformation.ProcessArchitecture.ToString(),
                ApplicationBasePath  = Directory.GetCurrentDirectory(),
                ExternalDatabaseType = dbConfiguration.ExternalDatabase.Type,
                OmbiDatabaseType     = dbConfiguration.OmbiDatabase.Type,
                SettingsDatabaseType = dbConfiguration.SettingsDatabase.Type,
                StoragePath          = storage.StoragePath.HasValue() ? storage.StoragePath : "None Specified",
                NotSupported         = Directory.GetCurrentDirectory().Contains("qpkg")
            };


            var version      = AssemblyHelper.GetRuntimeVersion();
            var productArray = version.Split('-');

            model.Version = productArray[0];
            //model.Branch = productArray[1];
            return(model);
        }
Beispiel #2
0
 /// <summary>
 /// Получить соединение по имени
 /// </summary>
 /// <param name="name">Имя соединения</param>
 /// <param name="defaultConnectionString"></param>
 /// <returns>Содениение</returns>
 public IDbConnection GetConnection(string name, string defaultConnectionString = null)
 {
     lock (Sync) {
         Reload();
         if (Registry.ContainsKey(name))
         {
             var component = Registry[name];
             if (component.InstantiateWithContainer)
             {
                 return(component.Container.Get <IDbConnection>(component.ContainerName));
             }
             else
             {
                 return(Activator.CreateInstance(component.ConnectionType, component.ConnectionString) as IDbConnection);
             }
         }
         else if (name.Contains(";"))
         {
             //full connection string
             return(DatabaseExtensions.CreateDatabaseConnectionFromString(name));
         }
         if (defaultConnectionString.IsNotEmpty())
         {
             return(new SqlConnection(defaultConnectionString));
         }
         return(null);
     }
 }
Beispiel #3
0
        private void PrepareEnvironment(IServiceProvider services)
        {
            var environment = services.GetRequiredService <IApplicationRuntime>().Environment;

            DatabaseExtensions.PrepareDbEnvironment(services, environment);
            BackgroundJobsExtensions.PrepareBgJobsEnvironment(services, environment);
        }
Beispiel #4
0
 /// <summary>
 /// 获取新的数据库连接设置
 /// </summary>
 /// <returns>数据库连接设置</returns>
 public ConnectionStringSettings GetNew()
 {
     using (var conn = DatabaseExtensions.CreateDbConnection(DataSource, ConnectString))
     {
         ConnectionStringSettings connectString = conn.MyQuery <ConnectionStringSettings>(QueryString).FirstOrDefault();
         return(connectString);
     }
 }
Beispiel #5
0
        public DatabaseContext CreateDbContext(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            var appSettings = new AppSettings();

            configuration.GetSection("AppSettings").Bind(appSettings);

            var options = new DbContextOptionsBuilder <DatabaseContext>();

            DatabaseExtensions.ConfigureDbContextOptions(configuration, appSettings, options);

            return(new DatabaseContext(options.Options));
        }
Beispiel #6
0
        /// <summary>
        ///     Creates a new instance of a OSItemIndexDbContext.
        /// </summary>
        /// <returns>A new instance of OSItemIndexDbContext.</returns>
        public OsItemIndexDbContext CreateDbContext(string[] args) // https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#evcp
        {
            var environment   = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            var configuration = new ConfigurationBuilder() // TODO Consider consting this somewhere, keep it all in once place, honestly prob not
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", true, true)
                                .AddJsonFile($"appsettings.{environment}.json", true)
                                .AddKeyPerFile("/run/secrets", true) // docker secrets dir
                                .AddEnvironmentVariables()
                                .Build();

            var connStrBuilder = DatabaseExtensions.NpgsqlConnectionStringFromConfig(configuration);

            var builder = new DbContextOptionsBuilder <OsItemIndexDbContext>()
                          .UseNpgsql(connStrBuilder.ConnectionString, o => o.CommandTimeout(15));

            return(new OsItemIndexDbContext(builder.Options));
        }
Beispiel #7
0
        internal static User Login(User user)
        {
            string Command = "SELECT * FROM User WHERE Username = '******'";
            var    result  = UserTableCreator.ReadData(Command);

            if (result.Count == 0)
            {
                return(null);
            }

            if (DatabaseExtensions.CheckPasswordMatch(result[0].Password, user.Password))
            {
                return(result[0]);
            }
            else
            {
                return(null);
            }
        }
Beispiel #8
0
 private static IEnumerable <XElement> InternalExecuteReader(string connection, string query, string elementName)
 {
     using (IDbConnection c = DatabaseExtensions.CreateDatabaseConnectionFromString(connection)){
         c.Open();
         IDbCommand cmd = c.CreateCommand();
         cmd.CommandText = query;
         using (IDataReader r = cmd.ExecuteReader()){
             while (r.Read() || r.NextResult())
             {
                 var e = new XElement(elementName);
                 for (int i = 0; i < r.FieldCount; i++)
                 {
                     string name = r.GetName(i);
                     e.SetAttr(name, r[i] is DBNull ? "" : r[i]);
                 }
                 yield return(e);
             }
         }
     }
 }
Beispiel #9
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <UklonSiteContext>();
                    DatabaseExtensions.Initialize(context);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occurred while seeding the database.");
                }
            }
            host.Run();
        }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型和参数执行 <paramref name="command"/> 命令并根据执行结果返回一个新创建的 <see cref="IDataReader"/> 对象。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="command">要被执行的 <see cref="DbCommand"/> 命令。</param>
 /// <returns>表示脚本命令执行的结果的一个 <see cref="IDataReader"/> 对象。</returns>
 public virtual IDataReader ExecuteReader(DbTransaction transaction, DbCommand command)
 {
     return(DatabaseExtensions.ExecuteReader(this.PrimitiveDatabase, transaction, command));
 }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型执行一个 SQL 脚本并根据执行结果返回受影响的行数。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <returns>表示脚本命令执行受影响的行数。</returns>
 public int ExecuteNonQuery(DbTransaction transaction, string commandText)
 {
     return(DatabaseExtensions.ExecuteNonQuery(this.PrimitiveDatabase, transaction, commandText));
 }
 /// <summary>
 /// 以指定的脚本类型执行一个 SQL 脚本并根据执行结果返回一个新创建的 <see cref="IDataReader"/> 对象。
 /// </summary>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <returns>表示脚本命令执行的结果的一个 <see cref="IDataReader"/> 对象。</returns>
 public IDataReader ExecuteReader(string commandText, CommandType commandType)
 {
     return(DatabaseExtensions.ExecuteReader(this.PrimitiveDatabase, commandText, commandType));
 }
 /// <summary>
 /// 以指定的脚本类型和参数执行一个 SQL 脚本并根据执行结果返回一个新创建的 <see cref="IDataReader"/> 对象。
 /// </summary>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 /// <returns>表示脚本命令执行的结果的一个 <see cref="IDataReader"/> 对象。</returns>
 public IDataReader ExecuteReader(string commandText, CommandType commandType, params object[] parameterValues)
 {
     return(DatabaseExtensions.ExecuteReader(this.PrimitiveDatabase, commandText, commandType, parameterValues));
 }
Beispiel #14
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var provider = Configuration["Database:Provider"];

            switch (provider)
            {
            case "InMemory":
                services.AddDbContextPool <AlloyContext>((ServiceProvider, builder) => builder
                                                         .AddInterceptors(ServiceProvider.GetRequiredService <EventTransactionInterceptor>())
                                                         .UseInMemoryDatabase("api"));
                break;

            case "Sqlite":
            case "SqlServer":
            case "PostgreSQL":
                services.AddDbContextPool <AlloyContext>((serviceProvider, builder) => builder
                                                         .AddInterceptors(serviceProvider.GetRequiredService <EventTransactionInterceptor>())
                                                         .UseConfiguredDatabase(Configuration));
                break;
            }

            services.AddSingleton <StartupHealthCheck>();
            services.AddSingleton <HostedServiceHealthCheck>();
            services.AddHealthChecks()
            .AddCheck <StartupHealthCheck>(
                "startup",
                failureStatus: HealthStatus.Degraded,
                tags: new[] { "ready" })
            .AddCheck <HostedServiceHealthCheck>(
                "service_responsive",
                failureStatus: HealthStatus.Unhealthy,
                tags: new[] { "live" });

            var connectionString = Configuration.GetConnectionString(DatabaseExtensions.DbProvider(Configuration));

            switch (provider)
            {
            case "Sqlite":
                services.AddHealthChecks().AddSqlite(connectionString, tags: new[] { "ready", "live" });
                break;

            case "SqlServer":
                services.AddHealthChecks().AddSqlServer(connectionString, tags: new[] { "ready", "live" });
                break;

            case "PostgreSQL":
                services.AddHealthChecks().AddNpgSql(connectionString, tags: new[] { "ready", "live" });
                break;
            }

            services.AddOptions()
            .Configure <DatabaseOptions>(Configuration.GetSection("Database"))
            .AddScoped(config => config.GetService <IOptionsMonitor <DatabaseOptions> >().CurrentValue)

            .Configure <ClaimsTransformationOptions>(Configuration.GetSection("ClaimsTransformation"))
            .AddScoped(config => config.GetService <IOptionsMonitor <ClaimsTransformationOptions> >().CurrentValue);

            services
            .Configure <ClientOptions>(Configuration.GetSection("ClientSettings"))
            .AddScoped(config => config.GetService <IOptionsMonitor <ClientOptions> >().CurrentValue);

            services
            .Configure <FilesOptions>(Configuration.GetSection("Files"))
            .AddScoped(config => config.GetService <IOptionsMonitor <FilesOptions> >().CurrentValue);

            services
            .Configure <ResourceOwnerAuthorizationOptions>(Configuration.GetSection("ResourceOwnerAuthorization"))
            .AddScoped(config => config.GetService <IOptionsMonitor <ResourceOwnerAuthorizationOptions> >().CurrentValue);

            services
            .Configure <ResourceOptions>(Configuration.GetSection("Resource"))
            .AddScoped(config => config.GetService <IOptionsMonitor <ResourceOptions> >().CurrentValue);

            services.AddCors(options => options.UseConfiguredCors(Configuration.GetSection("CorsPolicy")));

            services.AddSignalR()
            .AddJsonProtocol(options =>
            {
                options.PayloadSerializerOptions.PropertyNameCaseInsensitive = true;
                options.PayloadSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                options.PayloadSerializerOptions.Converters.Add(new JsonDateTimeConverter());
            });

            services.AddMvc(options =>
            {
                options.Filters.Add(typeof(ValidateModelStateFilter));
                options.Filters.Add(typeof(JsonExceptionFilter));

                // Require all scopes in authOptions
                var policyBuilder = new AuthorizationPolicyBuilder().RequireAuthenticatedUser();
                Array.ForEach(_authOptions.AuthorizationScope.Split(' '), x => policyBuilder.RequireScope(x));

                var policy = policyBuilder.Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new JsonNullableGuidConverter());
                // options.JsonSerializerOptions.Converters.Add(new JsonIntegerConverter());
                options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
                options.JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
            });

            services.AddSwagger(_authOptions);

            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.Authority                 = _authOptions.Authority;
                options.RequireHttpsMetadata      = _authOptions.RequireHttpsMetadata;
                options.SaveToken                 = true;
                options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidAudiences = _authOptions.AuthorizationScope.Split(' ')
                };

                options.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        // If the request is for our hub...
                        var path        = context.HttpContext.Request.Path;
                        var accessToken = context.Request.Query["access_token"];

                        if (!string.IsNullOrEmpty(accessToken) &&
                            (path.StartsWithSegments("/hubs")))
                        {
                            // Read the token out of the query string
                            context.Token = accessToken;
                        }
                        return(Task.CompletedTask);
                    }
                };
            });

            services.AddRouting(options =>
            {
                options.LowercaseUrls = true;
            });

            services.AddMemoryCache();

            services.AddScoped <IEventTemplateService, EventTemplateService>();
            services.AddScoped <IEventService, EventService>();
            services.AddScoped <ICasterService, CasterService>();
            services.AddScoped <IPlayerService, PlayerService>();
            services.AddScoped <ISteamfitterService, SteamfitterService>();
            services.AddScoped <IUserClaimsService, UserClaimsService>();
            services.AddTransient <EventTransactionInterceptor>();

            // add the other API clients
            services.AddPlayerApiClient();
            services.AddCasterApiClient();
            services.AddSteamfitterApiClient();

            // add the background IHostedServices
            services.AddAlloyBackgroundService();

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddScoped <IPrincipal>(p => p.GetService <IHttpContextAccessor>().HttpContext.User);

            services.AddHttpClient();

            ApplyPolicies(services);

            services.AddAutoMapper(cfg =>
            {
                cfg.ForAllPropertyMaps(
                    pm => pm.SourceType != null && Nullable.GetUnderlyingType(pm.SourceType) == pm.DestinationType,
                    (pm, c) => c.MapFrom <object, object, object, object>(new IgnoreNullSourceValues(), pm.SourceMember.Name));
            }, typeof(Startup));

            services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly);
            services.AddScoped <IClaimsTransformation, AuthorizationClaimsTransformer>();
        }
 /// <summary>
 /// 找出 <paramref name="command"/> 脚本中定义的参数列表,并将 <paramref name="parameterValues"/> 作为参数值分配给该参数列表。
 /// </summary>
 /// <param name="command">用于查找参数列表的 <see cref="DbCommand"/> 对象。</param>
 /// <param name="parameterValues">用于作为参数值分配给 <paramref name="command"/> 参数列表的值集合。</param>
 public virtual void AssignParameters(DbCommand command, params object[] parameterValues)
 {
     DatabaseExtensions.AssignParameters(this.PrimitiveDatabase, command, parameterValues);
 }
 /// <summary>
 /// 以指定的脚本类型和参数执行一个 SQL 脚本并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 public void LoadDataTable(DataTable dataTable, string commandText, CommandType commandType, params object[] parameterValues)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, commandText, commandType, parameterValues);
 }
 /// <summary>
 /// 以指定的脚本类型和参数执行一个 SQL 脚本并根据执行结果返回受影响的行数。
 /// </summary>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 /// <returns>表示脚本命令执行受影响的行数。</returns>
 public int ExecuteNonQuery(string commandText, CommandType commandType, params object[] parameterValues)
 {
     return(DatabaseExtensions.ExecuteNonQuery(this.PrimitiveDatabase, commandText, commandType, parameterValues));
 }
 /// <summary>
 /// 以指定的脚本参数执行一个 SQL 脚本并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 public void LoadDataTable(DataTable dataTable, string commandText, params DbParameter[] parameterValues)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, commandText, parameterValues);
 }
Beispiel #19
0
 /// <summary>
 /// 创建并返回与当前 <see cref="DbProviderFactory"/> 关联的 <see cref="DbConnection"/> 对象。
 /// </summary>
 /// <returns>与当前 <see cref="DbProviderFactory"/> 关联的 <see cref="DbConnection"/> 对象。</returns>
 public virtual DbConnection CreateConnection()
 {
     return(DatabaseExtensions.CreateConnection(this.PrimitiveDatabase));
 }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型和参数执行一个 SQL 脚本并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 public void LoadDataTable(DataTable dataTable, DbTransaction transaction, string commandText, CommandType commandType, params DbParameter[] parameterValues)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, transaction, commandText, commandType, parameterValues);
 }
 /// <summary>
 /// 作为事务处理的一部分执行一个 SQL 脚本并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 public void LoadDataTable(DataTable dataTable, DbTransaction transaction, string commandText)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, transaction, commandText);
 }
Beispiel #22
0
        internal HttpMessage CreateCreateOrUpdateRequest(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string extensionName, DatabaseExtensions parameters)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Put;
            var uri = new RawRequestUriBuilder();

            uri.Reset(endpoint);
            uri.AppendPath("/subscriptions/", false);
            uri.AppendPath(subscriptionId, true);
            uri.AppendPath("/resourceGroups/", false);
            uri.AppendPath(resourceGroupName, true);
            uri.AppendPath("/providers/Microsoft.Sql/servers/", false);
            uri.AppendPath(serverName, true);
            uri.AppendPath("/databases/", false);
            uri.AppendPath(databaseName, true);
            uri.AppendPath("/extensions/", false);
            uri.AppendPath(extensionName, true);
            uri.AppendQuery("api-version", "2021-02-01-preview", true);
            request.Uri = uri;
            request.Headers.Add("Accept", "application/json");
            request.Headers.Add("Content-Type", "application/json");
            var content = new Utf8JsonRequestContent();

            content.JsonWriter.WriteObjectValue(parameters);
            request.Content = content;
            message.SetProperty("UserAgentOverride", _userAgent);
            return(message);
        }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型和参数执行一个 SQL 脚本并根据执行结果返回受影响的行数。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 /// <returns>表示脚本命令执行受影响的行数。</returns>
 public int ExecuteNonQuery(DbTransaction transaction, string commandText, CommandType commandType, params DbParameter[] parameterValues)
 {
     return(DatabaseExtensions.ExecuteNonQuery(this.PrimitiveDatabase, transaction, commandText, commandType, parameterValues));
 }
 /// <summary>
 /// 作为事务处理的一部分执行 <paramref name="command"/> 命令并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="command"></param>
 public virtual void LoadDataTable(DataTable dataTable, DbTransaction transaction, DbCommand command)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, transaction, command);
 }
 /// <summary>
 /// 以指定的脚本类型执行一个 SQL 脚本并根据执行结果返回受影响的行数。
 /// </summary>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 /// <returns>表示脚本命令执行受影响的行数。</returns>
 public int ExecuteNonQuery(string commandText, CommandType commandType)
 {
     return(DatabaseExtensions.ExecuteNonQuery(this.PrimitiveDatabase, commandText, commandType));
 }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型执行一个 SQL 脚本并根据执行结果返回一个新创建的 <see cref="IDataReader"/> 对象。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <returns>表示脚本命令执行的结果的一个 <see cref="IDataReader"/> 对象。</returns>
 public IDataReader ExecuteReader(DbTransaction transaction, string commandText)
 {
     return(DatabaseExtensions.ExecuteReader(this.PrimitiveDatabase, transaction, commandText));
 }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本类型和参数执行 <paramref name="command"/> 命令并根据执行结果返回受影响的行数。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="command">要被执行的 <see cref="DbCommand"/> 命令。</param>
 /// <returns>表示脚本命令执行受影响的行数。</returns>
 public virtual int ExecuteNonQuery(DbTransaction transaction, DbCommand command)
 {
     return(DatabaseExtensions.ExecuteNonQuery(this.PrimitiveDatabase, transaction, command));
 }
 /// <summary>
 /// 作为事务处理的一部分以指定的脚本参数执行一个 SQL 脚本并根据执行结果返回一个新创建的 <see cref="IDataReader"/> 对象。
 /// </summary>
 /// <param name="transaction">用于包含脚本命令的 <see cref="DbTransaction"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="parameterValues">表示用于执行 <paramref name="commandText"/> 命令的参数列表。</param>
 /// <returns>表示脚本命令执行的结果的一个 <see cref="IDataReader"/> 对象。</returns>
 public IDataReader ExecuteReader(DbTransaction transaction, string commandText, params object[] parameterValues)
 {
     return(DatabaseExtensions.ExecuteReader(this.PrimitiveDatabase, transaction, commandText, parameterValues));
 }
 /// <summary>
 /// 以指定的脚本类型执行一个 SQL 脚本并将返回结果数据填充至 <paramref name="dataTable"/> 中。
 /// </summary>
 /// <param name="dataTable">用于填充脚本命令返回结果数据的 <see cref="DataTable"/> 对象。</param>
 /// <param name="commandText">表示要执行的 SQL 脚本文本内容。</param>
 /// <param name="commandType">表示一个 <see cref="CommandType"/> 值用于指示 <paramref name="commandText"/> 的类型。</param>
 public void LoadDataTable(DataTable dataTable, string commandText, CommandType commandType)
 {
     DatabaseExtensions.LoadDataTable(this.PrimitiveDatabase, dataTable, commandText, commandType);
 }
Beispiel #30
0
        public async Task <Response> CreateOrUpdateAsync(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string extensionName, DatabaseExtensions parameters, CancellationToken cancellationToken = default)
        {
            if (subscriptionId == null)
            {
                throw new ArgumentNullException(nameof(subscriptionId));
            }
            if (resourceGroupName == null)
            {
                throw new ArgumentNullException(nameof(resourceGroupName));
            }
            if (serverName == null)
            {
                throw new ArgumentNullException(nameof(serverName));
            }
            if (databaseName == null)
            {
                throw new ArgumentNullException(nameof(databaseName));
            }
            if (extensionName == null)
            {
                throw new ArgumentNullException(nameof(extensionName));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            using var message = CreateCreateOrUpdateRequest(subscriptionId, resourceGroupName, serverName, databaseName, extensionName, parameters);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 200:
            case 202:
                return(message.Response);

            default:
                throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(false);
            }
        }