我正在爲我的應用程序製作一個SQL腳本編輯器/執行程序組件,它與SQL Server Management Studio或舊查詢分析器非常相似。我正在使用C#,.NET Framework 3.5 SP1。我的問題是,我希望組件解析SQL以確定它是否應使用SqlCommand.ExecuteNonQuery(),SqlCommand.ExecuteScalar()或SqlDataAdapter.Fill(dataTable)來運行該腳本。其目的是允許用戶執行非查詢,但也返回結果集供用戶查看,就像SSMS /查詢分析器所做的一樣,但也隱藏了ADO.NET實現細節。解析T-SQL語句
我通常會默認爲SqlDataAdapter.Fill(dataTable),並且總是返回DataTable供用戶查看。這仍然會像ExecuteNonQuery那樣運行非查詢,但是它具有使用較慢的SqlDataAdapter類來運行的開銷。這在許多非查詢情況下不是最佳的。我會採用的方法是允許用戶選擇結果類型'表'(它將運行SqlDataAdapter.Fill(...),'Value'(它將運行ExecuteScalar)或' None'(它將運行ExecuteNonQuery)但我不希望它們暴露於ADO.NET實現細節,我希望它們只需在文本框中鍵入SQL腳本,點擊Execute按鈕,程序將會運行該腳本並返回一個數據網格中的結果集(如果有的話)
所以...我需要組件能夠在執行它之前解析SQL,以辨別是否會有結果集運行劇本與否
當談到這樣的事情時,我通常會問自己:「我將如何人爲地決定使用哪一個?」問問自己,你們什麼時候使用每一種?從那裏你會知道如何讓應用程序決定;你基本上爲此寫了一個AI。據我所知,除非您預先知道數據太大或者只是一個單一值,否則很難分辨使用哪一個,除非應用程序實際執行語句,否則應用程序將不知道該數據。 – BeemerGuy 2010-11-12 00:15:57
而且,由於您基本上正在編寫一個AI,因此您需要擔心它會變得自我意識,並決定它知道哪些查詢您的用戶應該比他們運行得更好。 :) – 2010-11-12 00:24:05