【发布时间】:2011-08-12 07:05:00
【问题描述】:
我想在我的 vb.net 应用程序中开发选择查询生成器。如果用户在富文本框中编写“选择查询”,该查询将被执行,结果将显示在网格视图中。任何人为此发送示例应用程序。
【问题讨论】:
标签: vb.net custom-controls builder
我想在我的 vb.net 应用程序中开发选择查询生成器。如果用户在富文本框中编写“选择查询”,该查询将被执行,结果将显示在网格视图中。任何人为此发送示例应用程序。
【问题讨论】:
标签: vb.net custom-controls builder
要回答您的问题,请查看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.");
}
【讨论】: