簡體   English   中英

SQL Server ADO.Net從SQL腳本檢索錯誤信息

[英]SQL Server ADO.Net retrieve error information from sql script

我正在做一個項目,在該項目中,我們必須查詢舊的SQL Server 2000數據庫(PeopleSoft,如果您必須知道的話)。 查詢返回結果集。 如果我們使用的是較新的數據庫,我將使用存儲過程和錯誤處理(例如@ ErrNo,@ ErrMsg,Try / Catch)來獲取所需的信息。

但是,由於我們使用的是SQL Server 2000,因此不允許使用存儲過程,因此只能使用動態SQL查詢和腳本。 我們當前正在使用ADO.Net(例如DbCommand和Execute方法)來獲取結果集。

我想做的是在我們的sql腳本中添加更多的錯誤處理/驗證,並將消息返回到我們的.Net代碼。 (例如,輸入值無效,找不到行等)

有誰知道如何在這些約束下做到這一點? 如果沒有簡便的方法,您可以推薦一些替代方法嗎? 例如

  1. 要求DBA為我們以及在腳本中創建專門的消息/日志記錄表,寫入該表和代碼,然后讀取該表

  2. 將我們的代碼/腳本分解成多個步驟,然后從.Net代碼中調用它(然后我們將不得不使用事務嗎?)

  3. 等等等? 真是在敲我的頭...

感謝大家。

存儲過程與您試圖實現的目標無關(我認為)。 即使存儲過程中有錯誤處理,您仍將發送無效數據以獲取錯誤處理。 似乎,您需要的是更好的“數據庫調用之前”驗證。

您可以做的以改善您的狀況是在很大程度上利用Ado.net。 專門使用DataTables 您可以加載架構,它將以Sql Table的形式創建DataTable 檢查DataTable Column對象的屬性http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn_properties%28v=vs.90%29.aspx

如果您嘗試首先將無效數據插入該表中,它將出錯,並且您將能夠創建特定的錯誤處理。

另外,您可以(並且應該)用參數化查詢替換動態sql。 這是推薦的方法,可以提高性能。

代替 :

"select * from customer where id = " + custId.ToString()

你應該做:

"select * from customer where id = @1"

然后,當您創建命令對象時,將添加一個參數。 這對於Sql Server性能是有好處的。

對於您來說, DataTable將是防止向服務器發送錯誤代碼的防線。

另一種方法是完全根據INFORMATION_SCHEMA編寫自己的數據驗證邏輯。

另一種方法是進行嚴格的數據輸入驗證。

通常,系統同時具有輸入驗證和數據層驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM