【问题标题】:How to develop custom query builder in my application?如何在我的应用程序中开发自定义查询生成器?
【发布时间】:2011-08-12 07:05:00
【问题描述】:

我想在我的 vb.net 应用程序中开发选择查询生成器。如果用户在富文本框中编写“选择查询”,该查询将被执行,结果将显示在网格视图中。任何人为此发送示例应用程序。

【问题讨论】:

    标签: vb.net custom-controls builder


    【解决方案1】:

    要回答您的问题,请查看this answer on codeproject.com

    SqlConnection con = new SqlConnection("Your Connection String Here");
                con.Open();
                SqlCommand cmdQuery = new SqlCommand("Your Query Here", con);
                SqlDataReader drQuery = cmdQuery.ExecuteReader();
                DataSet dsQuery = new DataSet();
                DataTable dtQuery = new DataTable();
                dsQuery.Tables.Add(dtQuery);
                dsQuery.Load(drQuery, LoadOption.PreserveChanges, dsQuery.Tables[0]);
                DataGridView1.DataSource = dsQuery.Tables[0];
    

    建议:永远不要让您的用户直接输入 SQL。您应该尽一切努力避免这种情况,因为您对安全性和性能都失去了控制。

    如果用户运行“DELETE FROM dbo.Orders”或消耗所有可用内存的非常复杂的查询怎么办?

    如果是针对 DBA 或开发人员,他们应该能够使用 SQL Server Management Studio 等开发工具。

    更新: 验证 SQL 的工作示例:

    string sql = "SELECT * FROM Table1 AS t1 INNER JOIN Table2 AS t2 ON t1.ID = t2.ParentID";
    if (System.Text.RegularExpressions.Regex.IsMatch(sql, "^SELECT([^;])$",System.Text.RegularExpressions.RegexOptions.IgnoreCase))
    {
    // do something
    }
    else
    {
    throw new InvalidOperationException("You're not allowed to execute nothing but SELECT-queries.");
    }
    

    【讨论】:

    • 这是我已经做过的,但我想限制用户只执行“选择”命令,并且用户也可以执行连接查询。请帮我这样做。
    • 我已经用一个关于如何验证 sql 的工作示例更新了我的答案。它要求查询以“SELECT”开头并且不能包含 ;这限制了用户添加额外的命令,如 DELETE 等。
    猜你喜欢
    • 2021-11-21
    • 2016-04-27
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多