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

使用 ASP.NET 构建用户响应式 Web 查询生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (6投票s)

2015年11月29日

CPOL

2分钟阅读

viewsIcon

29163

downloadIcon

10742

基于 Web 平台的查询生成器,可以与您的数据库互动:)

引言

本技巧帮助您使用 ASP.NET 构建用户响应式 Web 查询生成器,并深入了解 ASP.NET 的一些基本功能,以及如何使用基于 Web 的用户控件、CSS 样式等。之后,我们可以将数据导出为 PDF 或 Excel 格式。它与 Microsoft Edge 完美兼容。

背景

在网上搜索支持 Web 平台和各种情况的查询生成器已经三个星期了,我终于开发了一个独立的 Web 应用程序,可以与最终用户交互。

Using the Code

让我们进入主要代码部分,我们将建立连接后从数据库中获取数据,然后显示这些数据以便应用查询。

在这里,我尝试使此应用程序具有用户响应性。用户需要输入机器名称,应用程序将尝试读取可用的 SQL Server 数据库,然后获取相关的表或视图,用户希望在这些表或视图上应用查询条件。

DataBaseName = new List<string>();
machine_Name = txtMachineName.Text;
Session["Machine_Name"] = machine_Name;
        
string ConString = "Data Source=" + machine_Name + 
	";Integrated Security=True;MultipleActiveResultSets=True;";
using (var con1 = new SqlConnection(ConString))
{
    con1.Open();
    DataTable databases = con1.GetSchema("Databases");
    foreach (DataRow database in databases.Rows)
    {
        // fetching related details for each database
        String databaseName = database.Field<String>("database_name");
        DataBaseName.Add(databaseName.ToString());
        short dbID = database.Field<short>("dbid");
        DateTime creationDate = database.Field<DateTime>("create_date");
    }

同样,我们也可以获取数据库中存在的表/视图。

Session["selected_table"] = selectTable;
string sqlQuery = "Select * from " + selectTable;
SqlCommand command = new SqlCommand(sqlQuery);
SqlConnection sqlConn = new SqlConnection((Session["Connection_String"]).ToString());
sqlConn.Open();
command.Connection = sqlConn;
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);

在选择数据库和要选择的表详细信息后,我们可以进一步提取所选表/视图的属性。

我使用了一个基于 Web 的用户控件来应用提取的列名(属性)上的 where 条件查询。

请查看源代码,了解如何创建基于 Web 的用户控件并在主页上注册它。

优势:您无需以重复的方式显式地优化控件集合。

回到我们的应用程序,一旦用户完成对表/视图属性应用条件,我们将进入查询生成部分。根据条件,我不断地将我的查询生成器(CodeEngine.Framework.QueryBuilder.SelectQueryBuilderstring 追加到查询中,并最终执行它以获取结果。

SQLQueryText.Text = queryBuilder.BuildQuery(); // queryBuilder is a 
		// local variable of  CodeEngine.Framework.QueryBuilder.SelectQueryBuilder
SqlConnection sqlConn;
try
{
    SqlCommand command = new SqlCommand(SQLQueryText.Text);
    sqlConn = sqlConn = new SqlConnection((Session["Connection_String"]).ToString());
    sqlConn.Open();
    command.Connection = sqlConn;
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    adapter.Fill(dt);
    sqlConn.Close();
    // SetNewInstance();
    
}
catch (SqlException ex)
{
    this.Session["exceptionMessage"] = ex.Message;
    //   Response.Redirect("ErrorDisplay.aspx");
    lblError.Text = ex.Message;
    //       log.Write(ex.Message + ex.StackTrace);
    
}

之后,我们可以将结果处理为 Excel/Pdf 格式。这是一个非常简单的过程。

导出到 Excel

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=Export_Result.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
using (StringWriter sw = new StringWriter())
{
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    //To Export all pages from ResultGrid i.e. data grid used for displaying results
    ResultGrid.AllowPaging = false;
    ResultGrid.RenderControl(hw);
    
    //style to format numbers to string
    string style = @"<style> .textmode { } </style>";
    Response.Write(style);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
}

关注点

好吧,我对 ASP.NET 来说还是新手,之前一直在使用 WPF,最初,在 ASP.NET 中设计 UI 并使用用户控件和 CSS 样式对我来说很困难,但一旦完成,我就感到非常自信和着迷。

© . All rights reserved.