2017-06-21 4 views
0

私のプロジェクトでは、C#でMySQLの状態構文が正しいかどうかをチェックしたいのですが、これを行う方法は、MySQLに状態構文をチェックさせるAPIがあります。 ありがとうございます。MySQLの状態が正しいかどうかをプログラムで確認しますか?

+1

純粋にSQL構文をチェックしたい場合は、このWebサイト[MySQL構文チェック](https://www.piliapp.com/mysql-syntax-check/)を試すことができます。特定のデータベース/クエリに対して構文が機能するかどうかをテストする場合は、テストデータベース/テーブルを作成し、それを使用してテストする必要があります。 –

+0

私はC#を使用しています。私のプロジェクトでは、C#でプログラムをチェックする必要があります。それは実装できますか? – wqq

+0

さて、あなたはmysqlの一部または全部をここに投稿することができます。私はそれが正しい構文を持っているかどうかを確認するのを助けることができます(機密情報が含まれていればそれを変更する)か、C#では[try/catch ](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch)を実行してエラーがあるかどうかを確認します(コードを実行してSQLを実行する必要があります)一度動作するかどうかを確認するには、最初にテストステートメントを試してください)。 –

答えて

0

これを行うにはprepared statementsを使用できます。エラーを投げるかしないかによって、SQL構文が正しいかどうか、その正確なサーバー・バージョンでサポートされているかどうか、関連する表と列が存在する場合でも、純粋な構文検証以上のことがわかります。

しかし、あなたのコメントから、あなたのコードが(すべての)行を挿入するかどうかを実際に確かめようとしているのですが、これはうまくいきません。単に構文を検証しても、挿入するためのタイリングが有効です。文が正しい場合でも、integer列にstringまたはfloatの値を挿入するか、またはstring列を掛けることができます。あるいは、制約に違反する可能性があります。 nullを、not nullと宣言された列に挿入するか、外部キーまたは一意のキー制約に違反します。また、サーバー構成にも依存する可能性があります。例えば0000-00-00の日付を挿入することは許可されているかどうかにかかわらず、無効なデータがあるサーバーではエラーになり、別のサーバーでは警告のみが表示される可能性があります。

insertステートメントに行が挿入されているかどうかを実際に確認したい場合は、まったく別の質問をするのではなく、その質問をすることをお勧めします)、単にExecuteNonQueryを使用します。返されます

影響を受ける行の数。

単純に、これは挿入された行の数になります。たとえばあなたが使用している場合トリガーまたはon duplicate key updateを入力すると、その効果が表示されますが、通常は正確な値を入力する必要はなく、> 0であることのみを確認します。一方、すべての文が正しくなるように行を挿入する必要はありません。例えばいくつかのcriteraに基づいて不足している行を挿入するクエリは、明らかに、行が1つも欠落していないという理由だけで1つの行を挿入しなくてもうまくいっています。

完全に未知のコードを実行する必要がある場合は、これを実行する方法です。実行したいステートメントを実行し、起こりうるエラーを処理するだけです。

通常は、ユーザーが希望する文を入力することはできませんが、ユーザーがデータを入力したときに、(準備された)文を実行する前に入力を検証したり(たとえば、整数が実際に整数であるかどうかを確認するなど)、データを認識するコンポーネントを使用できます独自の検証エラーが発生した場合(たとえば、主キーが既に存在する場合やサーバーへの接続が失われている場合)は、キャッチして処理します(たとえば、「申し訳ありませんが、挿入しているユーザーが既に存在します。

実行前にデータ検証を含む文を実際に確認する必要がある場合は、トランザクションを開始し、ExecuteNonQueryを使用してロールバックし、結果/エラーを評価します。しかし、結果が異なる時点で同じではない可能性があることを覚えておいてください。挿入しようとしている主キーを持つ行を挿入または削除します。

+0

あなたの答えをありがとう、あなたは私が他のさまざまなアイデアを考え出すのに役立つ答え。どうもありがとうございました。 – wqq

関連する問題