我获得了与另一家公司拥有的数据库的连接。他们给我的用户具有受限的权限,这意味着我只能对某些视图进行选择查询。
我在这里遇到了一个小问题,因为另一家公司不那么合作。他们在不告诉我的情况下更改了我的用户密码,或者更改了视图的名称。由于有 40 多个视图,我想创建一个自动系统来检查一切是否正常。
我的问题是我可以对视图和数据库进行哪些检查?只是尝试打开连接并对每个视图进行选择 * 查询就足够了吗?
顺便说一句,数据库是 SQLServer 2008 R2,我使用 C#。
我获得了与另一家公司拥有的数据库的连接。他们给我的用户具有受限的权限,这意味着我只能对某些视图进行选择查询。
我在这里遇到了一个小问题,因为另一家公司不那么合作。他们在不告诉我的情况下更改了我的用户密码,或者更改了视图的名称。由于有 40 多个视图,我想创建一个自动系统来检查一切是否正常。
我的问题是我可以对视图和数据库进行哪些检查?只是尝试打开连接并对每个视图进行选择 * 查询就足够了吗?
顺便说一句,数据库是 SQLServer 2008 R2,我使用 C#。
这是一个检查所有必需视图是否存在的函数:
bool IsAllviewsExists()
{
string DatabaseName= "Your_DB_NAME";
string[] viewsInDB = GetAllViewsNamesInDB();
for (int i = 0; i < viewsInDB.Length; ++i)
{
using (SqlCommand cmd = CreateSqlCommand(String.Format("SELECT id FROM sysobjects WHERE ID = OBJECT_ID('{0}.dbo.{1}') AND (type = 'V')", DatabaseName,viewsInDB [i])))
{
using (DataTable objects = ExecuteDataTableQuery(cmd))
{
if (objects.Rows.Count == 0)
{
return false;
}
}
}
}
return true;
}
从以下位置调用的函数IsAllviewsExists
:(请注意,它们假定您有一个名为 的连接的数据成员_conn
)
SqlCommand CreateSqlCommand(string sql, SqlParameterCollection parameters)
{
SqlCommand cmd = _conn.CreateCommand();
cmd.Connection = _conn;
cmd.CommandText = sql;
if (parameters != null)
foreach (SqlParameter param in parameters)
cmd.Parameters.Add(param);
return cmd;
}
DataTable ExecuteDataTableQuery(SqlCommand cmd)
{
DataTable table = null;
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
table = new DataTable();
try
{
adapter.Fill(table);
}
catch (SqlException sqlEx)
{
rethrow;
}
}
return table;
}