예제 #1
0
        public JsonResult GenerateDatabase(string data)
        {
            LogExtension.LogInfo("Generating database", MethodBase.GetCurrentMethod());
            var i = 0;

            var databaseCredentials = JsonConvert.DeserializeObject <DataBaseConfiguration>(data);

            var isSql = databaseCredentials.ServerType.ToString();

            object result;

            if (String.Equals(isSql, "MSSQL", StringComparison.OrdinalIgnoreCase))
            {
                string connectionString;
                if (!databaseCredentials.IsWindowsAuthentication)
                {
                    connectionString =
                        "Data Source=" + databaseCredentials.ServerName + ";user id=" + databaseCredentials.UserName +
                        ";password="******"Server=" + databaseCredentials.ServerName + "; Integrated Security=yes;";
                }

                var sqldbScript = new FileInfo(AppDomain.CurrentDomain.BaseDirectory +
                                               WebConfigurationManager.AppSettings["SystemConfigurationPath"] +
                                               ServerSetup.SqlTables);

                var dbCreationScript = "USE [master]; CREATE DATABASE [" + databaseCredentials.DataBaseName + "];";

                var isDatabaseExist = CheckDatabaseExists(connectionString, databaseCredentials.DataBaseName);


                if (isDatabaseExist)
                {
                    var failResult = new { key = false, value = "Database name is already exist" };
                    return(Json(new { Data = failResult }));
                }

                var connection = new SqlConnection(connectionString);

                #region Create Database

                var isDatabaseCreated = false;

                try
                {
                    LogExtension.LogInfo("Creating database in SQL server", MethodBase.GetCurrentMethod());
                    var command = new SqlCommand(dbCreationScript, connection);
                    connection.Open();
                    command.ExecuteNonQuery();
                    isDatabaseCreated = true;
                }
                catch (SqlException ex)
                {
                    isDatabaseCreated = false;
                    LogExtension.LogInfo("Error in creating SQL Database", MethodBase.GetCurrentMethod());
                    LogExtension.LogError("Error in creating SQL Database", ex, MethodBase.GetCurrentMethod());
                    var failResult = new { key = false, value = ex.Message };
                    return(Json(new { Data = failResult }));
                }
                finally
                {
                    connection.Close();
                }
                LogExtension.LogInfo("Is database created?" + isDatabaseCreated.ToString(), MethodBase.GetCurrentMethod());
                #endregion

                if (isDatabaseCreated)
                {
                    var tabelCreationScript = "USE [" + databaseCredentials.DataBaseName + "]; " +
                                              sqldbScript.OpenText().ReadToEnd();

                    try
                    {
                        LogExtension.LogInfo("Creating database tables in SQL server", MethodBase.GetCurrentMethod());
                        var command = new SqlCommand(tabelCreationScript, connection);
                        connection.Open();
                        command.ExecuteNonQuery();
                    }
                    catch (SqlException ex)
                    {
                        LogExtension.LogInfo("Error in creating SQL Database tables", MethodBase.GetCurrentMethod());
                        LogExtension.LogError("Error in creating SQL Database", ex, MethodBase.GetCurrentMethod());
                        var failResult = new { key = false, value = ex.Message };
                        return(Json(new { Data = failResult }));
                    }
                    finally
                    {
                        connection.Close();
                    }
                    LogExtension.LogInfo("SQL database tables created successfully.", MethodBase.GetCurrentMethod());

                    if (!databaseCredentials.IsWindowsAuthentication)
                    {
                        connectionString =
                            "Data Source=" + databaseCredentials.ServerName + ";Initial Catalog=" +
                            databaseCredentials.DataBaseName + ";user id=" + databaseCredentials.UserName + ";password="******"Server=" + databaseCredentials.ServerName + ";Initial Catalog=" +
                                           databaseCredentials.DataBaseName + "; Integrated Security=yes;";
                    }
                }

                result = new { key = true, value = _tokenCryptography.DoEncryption(connectionString) };
            }
            else
            {
                var sqlcedbScript = new FileInfo(AppDomain.CurrentDomain.BaseDirectory +
                                                 WebConfigurationManager.AppSettings["SystemConfigurationPath"] +
                                                 ServerSetup.SqlTables);


                var appDataFolderPath = GlobalAppSettings.GetAppDataFolderPath();

                if (Directory.Exists(appDataFolderPath) == false)
                {
                    Directory.CreateDirectory(appDataFolderPath);
                }
                else
                {
                    Array.ForEach(Directory.GetFiles(appDataFolderPath), System.IO.File.Delete);
                }


                var connStr = "Data Source = " + appDataFolderPath + "ReportServer.sdf; Password = reportserver";

                using (var engine = new SqlCeEngine(connStr))
                {
                    LogExtension.LogInfo("Creating SQLCE database", MethodBase.GetCurrentMethod());
                    engine.CreateDatabase();
                }


                var script = sqlcedbScript.OpenText().ReadToEnd();

                SqlCeConnection conn = null;

                try
                {
                    conn = new SqlCeConnection(connStr);

                    conn.Open();

                    var cmd = conn.CreateCommand();

                    var splitter = new[] { ";" };

                    var commandTexts = script.Split(splitter, StringSplitOptions.RemoveEmptyEntries);

                    foreach (string commandText in commandTexts)
                    {
                        cmd.CommandText = commandText;
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    LogExtension.LogInfo("Error in creating SQL CE Database", MethodBase.GetCurrentMethod());
                    LogExtension.LogError("Error in creating SQL CE Database", ex, MethodBase.GetCurrentMethod());
                }
                finally
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                }

                result =
                    new
                {
                    key   = true,
                    value = _tokenCryptography.DoEncryption(connStr)
                };
            }

            return(Json(new { Data = result }));
        }