【解決方法】プロジェクトでエラー マークが DT を返すのはなぜですか?

プログラミングQA


実行時にnull値を返せるようにマークされていますが、その値を返させたらプロジェクトの実現のために見ていたビデオ

VB.NET
Public Function consultarCliente(numID As String) As DataTable()
       Try
           conectar()
           cmd = New SqlCommand("select ID, Nombres, TELEFONO FROM CLIENTES WHERE NUM_ID='" & numID & "'")

           cmd.Connection = con
           If cmd.ExecuteNonQuery Then

               Dim dt As New DataTable

               Dim adp As New SqlDataAdapter(cmd)

               adp.Fill(dt)

               Return dt
           Else
               Return Nothing
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try

   End Function

プロジェクトのビデオ開発者、Web ページのエラーの調査を参照

私が試したこと:

see the video developer of proyect, investigation in web page error

解決策 1

「実行時に null 値を返すことができるとマークされていますが、その値を返させたらプロジェクトの実現のために見ていたビデオ」または「ビデオを参照してください」の意味がわかりません。プロジェクトの開発者、Web ページのエラーの調査」 – 英語の文章としては意味がありません。 英語に自信のない方はGoogle翻訳をご利用ください。

しかし… ExecuteNonQuery は整数を返します。つまり、多数の行を返す可能性のあるデータのテーブルを SELECT していることになります。 これがブール値としてどのように評価されるのかはわかりませんが、その時点でアプリは例外で失敗すると思います。

テキストを完全にダンプし、行を DataTable に取得するだけです。これにより、より迅速かつ明確になります。

でも…そんなことしないでください! 文字列を連結して SQL コマンドを作成しないでください。 偶発的または意図的な SQL インジェクション攻撃にさらされ、データベース全体が破壊される可能性があります。 代わりに常にパラメータ化されたクエリを使用してください。

文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

SQL に関する限り、ユーザーが追加した引用符によって文字列が終了するため、問題が発生します。 しかし、さらに悪化する可能性もあります。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL はまったく異なるコマンドを受け取ります。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

SQL では、次の 3 つの個別のコマンドとして認識されます。

SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';

完全に有効な SELECT

SQL
DROP TABLE MyTable;

完全に有効な「テーブルの削除」コマンド

SQL
--'

それ以外はすべてコメントです。
つまり、一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。

したがって、常にパラメータ化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元できるように準備してください。 バックアップは定期的に取っていますよね?

コメント

タイトルとURLをコピーしました