适用于任何数据库的数据库查看器和更新器






4.29/5 (12投票s)
2006年7月18日
1分钟阅读

100079

2149
查看和更新任何数据库表和元数据。包含示例数据库。

MyDbViewer
引言
这是一个完全动态的数据库查看器。它可以用来
- 查看任何数据库
- 导航到不同的表
- 通过简单地在字段中输入值来选择数据
- 执行表数据的更新
- 以网格形式显示数据
- 以单条记录的形式显示数据
- 查看元数据

GridView
DbViewer 的用途
此查看器的目的是为了能够直接操作表,而无需使用 SQL Server 或 MS Access。它主要是一个开发人员工具,并非最终用户工具,尽管可以针对用户进行定制。
DbViewer 的用途
- 快速操作表
- 内容管理
使用代码
解压缩并在 VS2005 中以网站方式打开。从 default.htm 页面运行代码。
(default.htm 是一个虚拟页面,它加载 _Chapter13_databaseviewer 文件夹中的相关 aspx 页面。)
数据库类 DbData
应用程序的所有数据库逻辑都已放置在数据库类 DbData 中。
代码片段
表中的元数据信息不是通过读取表获得的,而是通过使用 GetSchema 命令获得的。请参阅 DbData 类中的函数,了解如何检索列。
private string dbFieldsSQL(string astrTable, string astrField, bool abReadOnly)
{
    DataTable oDataTable, oIndexTable;
    SqlConnection oConn;
    string        strRows;
    try
    {
        oConn       = dbSqlConnection();
        oConn.Open();
        oDataTable  = oConn.GetSchema("Columns");
        oIndexTable = oConn.GetSchema("IndexColumns");
        strRows     = dbFields(oDataTable, oIndexTable, 
                      astrTable, astrField, abReadOnly);
        oConn.Close();
    }
    catch (Exception err)
    {
        strRows = err.Message;
    }
    return strRows;
}
private string dbFields(DataTable oDataTable, DataTable oIndexTable, 
               string astrTable, string astrField, bool abReadOnly)
{
    int      intNo, intMax;
    string   strCol, strRows;
    string[] arrFields = new string[1000];
    
    strRows  = "\n\n";
    strRows += dbStyle();
    
    // SORT BY ORDINAL_POSITION
    intMax = 0;
    strRows += "<TABLE BORDER=0 CELLSPACING=1>\n";
    foreach (DataRow oRow in oDataTable.Rows)
    {
        if (astrTable == oRow["TABLE_NAME"].ToString())
        {
            if (astrField == "" || astrField.ToLower().Trim() 
                == oRow["COLUMN_NAME"].ToString().ToLower().Trim())
            {
                // intNo = (int) oRow["ORDINAL_POSITION"];
                intNo            = Convert.ToInt32(oRow["ORDINAL_POSITION"]);
                intMax           = (intNo > intMax) ? intNo : intMax;
                strCol           = oRow["COLUMN_NAME"].ToString();
                arrFields[intNo] = "<TR><TD CLASS=Smalls " + 
                                   "ALIGN='left'>" + strCol + 
                                   "<BR /><INPUT NAME=INPUT_" + 
                                   strCol + " ###" + strCol + "### ";
                // READONLY if Key/Index Field
                if (abReadOnly)
                {
                    foreach (DataRow oIndexRow in oIndexTable.Rows)
                    {
                        if (astrTable == oIndexRow["table_name"].ToString() && 
                            oRow["COLUMN_NAME"].ToString() == 
                            oIndexRow["column_name"].ToString())
                        {
                            arrFields[intNo] += 
                                " READONLY STYLE='background: #C0C0C0;' ";
                            break;
                        }
                    }
                }
                arrFields[intNo] += "></TD></TR>\n";
            }
        }
    }
    for (intNo=1;intNo<intMax+1;intNo++)
        {strRows += (arrFields[intNo] != "") ? arrFields[intNo] : "";}
    strRows += "</TABLE>\n";
    return strRows;
}
历史
- 2006 年 7 月 25 日 - 更新下载
