Vb.net 如何在我的应用程序中开发自定义查询生成器?

Vb.net 如何在我的应用程序中开发自定义查询生成器?,vb.net,custom-controls,builder,Vb.net,Custom Controls,Builder,我想在vb.net应用程序中开发select查询生成器。如果用户在richtext框中写入“选择查询”,则将执行该查询,结果将显示在网格视图中。任何人都可以发送此示例应用程序 要回答您的问题,请看: 建议:不要让用户直接输入SQL。您应该尽一切可能避免这种情况,因为您对安全性和性能都失去了控制 如果用户运行“DELETE FROM dbo.Orders”或使用所有可用内存的非常复杂的查询,该怎么办 如果是DBA或开发人员,他们应该能够使用类似的开发工具 更新: 验证SQL的工作示例: strin

我想在vb.net应用程序中开发select查询生成器。如果用户在richtext框中写入“选择查询”,则将执行该查询,结果将显示在网格视图中。任何人都可以发送此示例应用程序

要回答您的问题,请看:

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

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

如果是DBA或开发人员,他们应该能够使用类似的开发工具

更新: 验证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.");
}

这是我已经做过的,但是我想限制用户只执行“select”命令,并且用户也提供了执行join查询的能力。请帮我做这件事。我已经用一个如何验证sql的工作示例更新了我的答案。要求查询以“选择”开头,不能包含;它限制用户添加附加命令,如DELETE和after。
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.");
}