1

我获得了与另一家公司拥有的数据库的连接。他们给我的用户具有受限的权限,这意味着我只能对某些视图进行选择查询。

我在这里遇到了一个小问题,因为另一家公司不那么合作。他们在不告诉我的情况下更改了我的用户密码,或者更改了视图的名称。由于有 40 多个视图,我想创建一个自动系统来检查一切是否正常。

我的问题是我可以对视图和数据库进行哪些检查?只是尝试打开连接并对每个视图进行选择 * 查询就足够了吗?

顺便说一句,数据库是 SQLServer 2008 R2,我使用 C#。

4

1 回答 1

1

这是一个检查所有必需视图是否存在的函数:

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;
}
于 2013-07-31T07:25:37.387 回答