65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.29/5 (12投票s)

2006年7月18日

1分钟阅读

viewsIcon

100079

downloadIcon

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 日 - 更新下载
© . All rights reserved.