2011-08-12 23 views

回答

0

要回答你的問題,看看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」或使用所有可用內存的非常複雜的查詢,該怎麼辦?

如果是數據庫管理員或開發人員,他們應該能夠使用像SQL Server Management Studio等開發工具。

UPDATE: 工作例如用於驗證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."); 
} 
+0

這是我做了,但我想限制用戶只能執行「選擇」命令,以及用戶給予的能力也可以執行連接查詢。請幫助我做到這一點。 – Sathish

+0

我已經更新了一個關於如何驗證sql的工作示例。它要求查詢以「SELECT」開始並且不能包含;這限制了用戶在添加諸如DELETE之類的附加命令之後。 –

+0

如果解決了您的問題,請將此答案標記爲已接受。 –

相關問題