137 lines
4.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |