예제 #1
0
        private void ExecuteSql(string script, ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = null,
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog.Initial,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo) ?? ConnectionStrings.ConnectionString;

            //TODO: [DIREF] get options from DI through constructor
            using (var ctx = new MsSqlDataContext(connectionString, DataOptions.GetLegacyConfiguration(), CancellationToken.None))
            {
                ctx.ExecuteReaderAsync(script, async(reader, cancel) =>
                {
                    do
                    {
                        if (reader.HasRows)
                        {
                            while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                            {
                                // empty code block, created only for checking the connection
                            }
                        }
                    } while (reader.NextResult());
                    return(Task.FromResult(0));
                }).GetAwaiter().GetResult();
            }
        }
예제 #2
0
        public override void Execute(ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = (string)context.ResolveVariable(ConnectionName),
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo);

            var initialData = InitialData.Load(new SenseNetServicesInitialData(), null);
            var dataOptions = Options.Create(DataOptions.GetLegacyConfiguration());
            var connOptions = Options.Create(new ConnectionStringOptions
            {
                ConnectionString = connectionString
            });

            var installer    = new MsSqlDataInstaller(connOptions, NullLoggerFactory.Instance.CreateLogger <MsSqlDataInstaller>());
            var dataProvider = new MsSqlDataProvider(dataOptions, connOptions, installer);

            installer.InstallInitialDataAsync(initialData, dataProvider, CancellationToken.None).GetAwaiter().GetResult();
        }
예제 #3
0
        public void DC_MSSQL_Construction_ConnectionInfo_Named_CustomDb()
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = "CustomCnStr",
                InitialCatalog     = InitialCatalog.Initial,
                InitialCatalogName = "CustomDb"
            };

            // ACTION
            var connectionStrings = new ConnectionStringOptions
            {
                Repository           = "Data Source=ds;Initial Catalog=ic;Integrated Security=True",
                AllConnectionStrings = new Dictionary <string, string>
                {
                    { "CustomCnStr", "Data Source=CustomServer;Initial Catalog=InitialCatalog1;Integrated Security=True" }
                }
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo, connectionStrings);

            // ASSERT
            var expected = "Data Source=CustomServer;Initial Catalog=CustomDb;Integrated Security=True";

            Assert.AreEqual(expected, connectionString);
        }
예제 #4
0
        private void ExecuteSql(SqlScriptReader sqlReader, ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = (string)context.ResolveVariable(ConnectionName),
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo, context.ConnectionStrings)
                                   ?? context.ConnectionStrings.Repository;

            while (sqlReader.ReadScript())
            {
                var script = sqlReader.Script;

                var sb = new StringBuilder();

                //TODO: [DIREF] get options from DI through constructor
                using (var ctx = new MsSqlDataContext(connectionString, DataOptions.GetLegacyConfiguration(), CancellationToken.None))
                {
                    ctx.ExecuteReaderAsync(script, async(reader, cancel) =>
                    {
                        do
                        {
                            if (reader.HasRows)
                            {
                                var first = true;
                                while (await reader.ReadAsync(cancel).ConfigureAwait(false))
                                {
                                    if (first)
                                    {
                                        for (int i = 0; i < reader.FieldCount; i++)
                                        {
                                            sb.Append(reader.GetName(i)).Append("\t");
                                        }
                                        Logger.LogMessage(sb.ToString());
                                        sb.Clear();
                                        first = false;
                                    }
                                    for (int i = 0; i < reader.FieldCount; i++)
                                    {
                                        sb.Append(reader[i]).Append("\t");
                                    }
                                    Logger.LogMessage(sb.ToString());
                                    sb.Clear();
                                }
                            }
                        } while (await reader.NextResultAsync(cancel).ConfigureAwait(false));
                        return(Task.FromResult(0));
                    }).GetAwaiter().GetResult();
                }
            }
            Logger.LogMessage("Script is successfully executed.");
        }
예제 #5
0
        public void DC_MSSQL_Construction_ConnectionInfo_Master()
        {
            var connectionInfo = new ConnectionInfo
            {
                DataSource         = "DataSource1",
                InitialCatalog     = InitialCatalog.Master,
                InitialCatalogName = "InitialCatalog1"
            };

            // ACTION
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo) ?? ConnectionStrings.ConnectionString;

            // ASSERT
            var expected = "Data Source=DataSource1;Initial Catalog=master;Integrated Security=True";

            Assert.AreEqual(expected, connectionString);
        }
예제 #6
0
        public override void Execute(ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                ConnectionName     = (string)context.ResolveVariable(ConnectionName),
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalog     = InitialCatalog,
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo);

            var initialData = InitialData.Load(new SenseNetServicesInitialData());

            MsSqlDataInstaller.InstallInitialDataAsync(initialData, new MsSqlDataProvider(), connectionString,
                                                       CancellationToken.None).GetAwaiter().GetResult();
        }
예제 #7
0
        public void DC_MSSQL_Construction_ConnectionInfo_UserPassword()
        {
            var connectionInfo = new ConnectionInfo
            {
                DataSource         = "DataSource1",
                InitialCatalog     = InitialCatalog.Initial,
                InitialCatalogName = "InitialCatalog1",
                UserName           = "******",
                Password           = "******"
            };

            // ACTION
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo) ?? ConnectionStrings.ConnectionString;

            // ASSERT
            var expected = "Data Source=DataSource1;Initial Catalog=InitialCatalog1;Integrated Security=False;Persist Security Info=False;User ID=User1;Password=123";

            Assert.AreEqual(expected, connectionString);
        }
예제 #8
0
        public void DC_MSSQL_Construction_ConnectionInfo()
        {
            var connectionInfo = new ConnectionInfo
            {
                DataSource         = "DataSource1",
                InitialCatalog     = InitialCatalog.Initial,
                InitialCatalogName = "InitialCatalog1"
            };

            // ACTION
            var connectionStrings = new ConnectionStringOptions
            {
                Repository = "Data Source=ds;Initial Catalog=ic;Integrated Security=True"
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo, connectionStrings);

            // ASSERT
            var expected = "Data Source=DataSource1;Initial Catalog=InitialCatalog1;Integrated Security=True";

            Assert.AreEqual(expected, connectionString);
        }
예제 #9
0
        private bool ExecuteSql(string script, ExecutionContext context)
        {
            var connectionInfo = new ConnectionInfo
            {
                DataSource         = (string)context.ResolveVariable(DataSource),
                InitialCatalogName = (string)context.ResolveVariable(InitialCatalogName),
                UserName           = (string)context.ResolveVariable(UserName),
                Password           = (string)context.ResolveVariable(Password)
            };
            var connectionString = MsSqlDataContext.GetConnectionString(connectionInfo) ?? ConnectionStrings.ConnectionString;

            //TODO: [DIREF] get options from DI through constructor
            using (var ctx = new MsSqlDataContext(connectionString, DataOptions.GetLegacyConfiguration(), CancellationToken.None))
            {
                object result;
                try
                {
                    result = ctx.ExecuteScalarAsync(script).GetAwaiter().GetResult();
                }
                catch (Exception ex)
                {
                    throw new PackagingException("Error during SQL script execution. " + ex);
                }

                if (result == null || Convert.IsDBNull(result))
                {
                    return(false);
                }

                if (result is bool @bool)
                {
                    return(@bool);
                }
                if (result is byte @bybte)
                {
                    return(@bybte > 0);
                }
                if (result is decimal @decimal)
                {
                    return(@decimal > 0);
                }
                if (result is double @double)
                {
                    return(@double > 0);
                }
                if (result is float @float)
                {
                    return(@float > 0);
                }
                if (result is int @int)
                {
                    return(@int > 0);
                }
                if (result is long @long)
                {
                    return(@long > 0);
                }
                if (result is sbyte @sbyte)
                {
                    return(@sbyte > 0);
                }
                if (result is short @short)
                {
                    return(@short > 0);
                }
                if (result is uint @uint)
                {
                    return(@uint > 0);
                }
                if (result is ulong @ulong)
                {
                    return(@ulong > 0);
                }
                if (result is ushort @ushort)
                {
                    return(@ushort > 0);
                }
                if (result is string @string)
                {
                    return(!string.IsNullOrEmpty(@string));
                }
            }
            return(false);
        }