Files
VAR.DatabaseExplorer/VAR.DatabaseExplorer/Code/DataAccess/DatabaseDA.cs

137 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using VAR.DatabaseExplorer.Code.DataTransfer;
namespace VAR.DatabaseExplorer.Code.DataAccess
{
public class DatabaseDA
{
public static List<Database> GetAllDatabases(string connectionString)
{
var databases = new List<Database>();
var cnx = new SqlConnection(connectionString);
cnx.Open();
DataTable dt = cnx.GetSchema("Databases");
cnx.Close();
dt.DefaultView.Sort = "database_name ASC, create_date ASC";
dt = dt.DefaultView.ToTable();
foreach (DataRow dr in dt.Rows)
{
databases.Add(new Database
{
Name = (string)dr["database_name"],
CreateDate = (DateTime)dr["create_date"]
});
}
return databases;
}
public static Database GetInfo(string connectionString)
{
string databaseName = null;
var cnx = new SqlConnection(connectionString);
string strCmd = string.Format(@"
SELECT
[name] DatabaseName,
[create_date] CreateDate
FROM sys.databases
WHERE database_id = DB_ID();
");
var da = new SqlDataAdapter(strCmd, cnx);
var dt = new DataTable();
cnx.Open();
databaseName = cnx.Database;
da.Fill(dt);
cnx.Close();
if(dt.Rows.Count == 0)
{
return new Database
{
Name = databaseName,
CreateDate = DateTime.UtcNow,
};
}
var database = new Database
{
Name = Convert.ToString(dt.Rows[0]["DatabaseName"]),
CreateDate = Convert.ToDateTime(dt.Rows[0]["CreateDate"]),
};
return database;
}
public static List<string> GetSchemas(string connectionString)
{
var cnx = new SqlConnection(connectionString);
string strCmd = string.Format(@"
select s.name as schema_name
from sys.schemas s
where s.principal_id = 1 AND schema_id != 1
order by s.name
");
var da = new SqlDataAdapter(strCmd, cnx);
var dt = new DataTable();
cnx.Open();
da.Fill(dt);
cnx.Close();
List<string> schemas = dt.AsEnumerable().Select(dr => Convert.ToString(dr["schema_name"])).ToList();
return schemas;
}
public static bool SupportedSqlServerVersion(string serverVersion)
{
return
serverVersion.StartsWith("10.") ||
serverVersion.StartsWith("11.") ||
serverVersion.StartsWith("12.") ||
serverVersion.StartsWith("13.") ||
serverVersion.StartsWith("14.") ||
serverVersion.StartsWith("15.") ||
serverVersion.StartsWith("16.") ||
false;
}
public static bool VerifyModule(string connectionString, string schema, string name)
{
SqlDataAdapter dataAdapter;
var cnx = new SqlConnection(connectionString);
cnx.Open();
string procedureName = string.Format("[{0}].[{1}]", schema, name);
if (SupportedSqlServerVersion(cnx.ServerVersion))
{
dataAdapter = new SqlDataAdapter(@"
BEGIN TRY
EXECUTE sys.sp_refreshsqlmodule @Name;
SELECT 1 'OK';
END TRY
BEGIN CATCH
SELECT 0 'OK';
END CATCH
", cnx);
dataAdapter.SelectCommand.Parameters.AddWithValue("@Name", (object)procedureName ?? DBNull.Value);
}
else
{
cnx.Close();
return true;
}
var dt = new DataTable();
dataAdapter.Fill(dt);
cnx.Close();
int isOK = Convert.ToInt32(dt.Rows[0][0]);
return isOK != 0;
}
}
}