2017-06-21 79 views
0

在我的項目中,我想檢查MySQL狀態語句是否正確與C#,如何做到這一點,MySQL是否有一個API,可以讓我檢查狀態語法。 非常感謝。檢查MySQL狀態是否正確或不是以編程方式?

+1

如果你想純粹檢查SQL語法,你可以試試這個網站[MySQL Syntax Check](https://www.piliapp.com/mysql-syntax-check/)。如果要測試語法是否適用於特定的數據庫/查詢,則需要創建一個測試數據庫/表並使用它進行測試。 –

+0

我正在使用C#,在我的項目中,我需要用C#編程檢查它。它是如何實施的? – wqq

+0

那麼,你可以在這裏發佈部分/全部的mysql,我相信我們可以幫助驗證它是否有正確的語法(如果它包含敏感信息,請更改它),或者在C#中,可以使用[try/catch ](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/try-catch)來檢查是否有任何錯誤(您仍然需要運行代碼並執行sql一次檢查它是否有效,首先嚐試測試語句)。 –

回答

0

您可以使用prepared statements來執行此操作。通過拋出錯誤或不拋出錯誤,它會告訴你SQL語法是否正確,是否支持該確切的服務器版本,即使存在涉及的表和列,這不僅僅是一種純粹的語法驗證。

但是,根據您的評論,您實際上試圖告訴您的代碼是否(或所有)成功插入(全部)行,並且這不會以這種方式工作:僅驗證語法不會驗證您的數據是插入是有效的。即使該聲明是正確的,您可能會嘗試將stringfloat值插入integer列或乘以string列。或者你可能違反約束條件,例如將null插入聲明爲not null的列或違反外鍵或唯一鍵約束。它也可以取決於服務器配置;例如插入日期0000-00-00可能被允許或不允許,並且無效的數據可能導致一臺服務器發生錯誤,而另一臺服務器只會發出警告。

所以如果你真的想檢查一條insert語句是否插入了行(在這種情況下,詢問一下,而不是詢問完全不同的問題通常是個好主意),那麼你可以簡單地使用ExecuteNonQuery。它將返回

受影響的行數。

在簡單情況下,這將是插入行的數量。如果您使用例如觸發器或on duplicate key update,它會包含它們的效果,但通常,您甚至不需要確切的值,並且只會檢查它是否爲> 0。另一方面,並​​非每個insert語句都必須插入行才能正確;例如一個基於某些標準將插入缺失行的查詢顯然做得很好,即使它沒有插入一行也僅僅是因爲沒有行丟失。所以如果你必須執行完全未知的代碼,這是要走的路:簡單地執行你想執行的語句,並處理任何可能發生的錯誤。

雖然通常您不會允許用戶輸入他想要的任何聲明。你可能有一些用戶輸入數據的形式,然後你可以在執行(準備好的)語句之前驗證輸入(例如檢查一個整數是否是一個整數)或使用數據感知組件(可能會執行數據庫訪問和類型驗證自己)。如果發生錯誤(例如,主鍵已經存在或與服務器的連接丟失),請抓住並處理它(例如,顯示用戶友好的錯誤消息,如「對不起,您插入的用戶已存在」)。

如果在執行之前確實需要檢查包括數據驗證的語句,則可以開始一個事務,使用ExecuteNonQuery,將其回滾並評估結果/錯誤。但請記住,在不同的時間點結果可能不一樣 - 在您測試之後,其他人可能會有使用您要插入的主鍵插入或刪除一行。

+0

謝謝你的回答,你的回答幫助我想出其他不同的想法。非常感謝你。 – wqq

相關問題