2

C#コードに簡単なselectステートメントを追加したいと思います。サンプルは以下のようになります。fnameのyのような値は、パラメーターから取得されます。//myTableからlnameを選択します。fname='y'

これが私がしていることです。私は明らかにSQL例外を取得しています。どうすれば修正できますか?ありがとう。

string strOrdersOrigSQL = "SELECT LastName FROM Employees";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
       strOrdersSQL = strOrdersOrigSQL + "where FirstName ="+ 'strFname';
4

5 に答える 5

15

SQLコマンドを手動で連結しないでください。クラスSqlCommandを使用し、パラメーターを追加します

using (var cmd = new SqlCommand("SELECT LastName FROM Employees where FirstName = @firstName", conn))
{
   cmd.Parameters.AddWithValue("@firstName", strFname);
   var reader = cmd.ExecuteReader();
}
于 2012-07-17T17:56:26.307 に答える
3

クエリに関するその他の問題は、スペースが不足していて、引用符が文字列リテラル内にあることです。

strOrdersSQL = strOrdersOrigSQL + " where FirstName = '"+ strFname + "'";
//                                 ^                  ^               ^

ただし、変数に引用文字または円記号が含まれている場合でも、これは機能しません。

文字列をエスケープする代わりに、パラメータ化されたクエリを使用する必要があります。

于 2012-07-17T17:59:32.880 に答える
3

C#から渡すときにSQLで文字をエスケープすることを心配する必要はありません

SQLはあなたのためにそれをします

あなたがsiをする必要があるすべて:

string strOrdersOrigSQL = "SELECT LastName FROM Employees Where  FirstName = @FirstName" 

SqlParameterを介して@FirstNameの値を渡すことができます。これにより、クエリがSQLインジェクションから保護されます。

于 2012-07-17T18:01:07.143 に答える
1

しかし、それは次のように行うことができます

string strOrdersOrigSQL = "SELECT LastName FROM Employees";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
       strOrdersSQL = strOrdersOrigSQL + " where FirstName ='"+ strFname + "'";

SQLインジェクションの影響を受ける可能性があるため、これは適切な方法ではありません。代わりに、パラメータ化されたクエリを使用してください。

于 2012-07-17T17:59:05.963 に答える
0

まず、SqlCommandを使用します。ただし、直接SQLを作成する場合は、入力をエスケープする限り問題ありません。あなたはこれに非常に注意し、あなたが何をしているのかを知っているべきです。それ以外の場合、コードはSQLインジェクションを提示します。正しいコードは次のとおりです。

string strOrdersOrigSQL = "SELECT LastName FROM Employees ";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
strOrdersSQL = strOrdersOrigSQL + "where FirstName = '" + strFname.Replace("'", "''") + "'";

strFnameが変数であると仮定します。

于 2012-07-17T17:59:02.437 に答える