0

textBox から取得した値を、その列の値が NULL である列に挿入する SQL ステートメントを作成したい

私はC#でそれをやっていますが、誰かが私を助けることができるかどうか疑問に思っていました...コマンドの疑似コードバージョンを書きました:

string newPhoneNumber = textBox.Text;
SqlCommand cmd = new SqlCommand(
"INSERT INTO table ([Tag ID]) 
 VALUES ('" + newPhoneNumber + "')"; 
 WHERE columnName = NULL" 
cmd.ExecuteNonQuery();
4

6 に答える 6

5

まず、SQL パラメータを使用します。これにより、 SQL インジェクションが防止されます。まだ誰もこれについて言及していないとは信じられません。5つの回答があり、これまで言及したのは私だけです。

コマンドを次のように構成します。

SqlCommand cmd = new SqlCommand(
"INSERT INTO table ([Tag ID]) SELECT TOP 1 @newPhoneNumber FROM [table] WHERE columnName IS NULL");
cmd.Parameters.Add("@newPhoneNumber", Sqldbtype.nvarchar).Value = textBox.Text;
cmd.ExecuteNonQuery();
于 2012-05-16T13:37:13.363 に答える
5

NULL と等しいのではなく NULL を使用します。

WHERE columnName IS NULL
于 2012-05-16T13:33:45.543 に答える
3

Insert Queryと一緒に使用することはできませんWhere

ColumnName IS NUllあなたの価値観はすでにそこにあるので、他の回答が言ったように書いてもうまくいきません。

使用する必要がありますUpdate query

"Update tablename set first_field_name = first_value, 
  second_field_name = second_field_value WHERE columnName IS NULL";

またNULL、値ではありません。その状態です。これは、(フロントエンドで)メモリが割り当てられていないことを意味します。

たとえば、C# の文字列の場合 - メモリが割り当てられていない場合、それらは null になります。null はありません。

回答に関係なく、質問に関連する注意/警告:

常にSQL インジェクションに注意してください。パラメーター化されたクエリ (@ が付いているもの) を使用します。

SQL インジェクションの詳細

于 2012-05-16T13:34:11.843 に答える
3

このクエリをIS NULL と共に使用します。

"INSERT INTO table ([Tag ID]) VALUES (@PhoneNumber) WHERE columnName IS NULL"

ParametrizedCommand を使用してください。他の回答に例があります。

于 2012-05-16T13:34:55.513 に答える
2

2つの問題があります。SQL NULL では、NULL でさえ、何にも等しくありません。すなわちNULL = NULL偽です。そこで最初の問題はWHERE ColumnName = NULL

次に、SQL は有効な構文ではありません。を使用する場合は where 句を指定できません。またはINSERT .. VALUESを使用する必要があります。例えばSELECT .. WHEREIF.. ELSE

INSERT INTO table ([Tag ID])
SELECT  TOP 1 @PhoneNumber
FROM    YourTable 
WHERE   YourColumn IS NULL

また

IF EXISTS (SELECT 1 FROM YourTable WHERE YourColumn IS NULL)
    BEGIN
        INSERT Table ([tAG id]) VALUES(@PhoneNumber)
    END

これらの例の両方に、存在するYourTableテーブルがありますYourColumn

最後に、可能であれば、SQL ステートメントを作成するために文字列の連結を避けます。

string sql = // One of the queries above
cmd.CommandText = sql
cmd.Parameters.Add("@PhoneNumber", SqlDbType.Varchar).Value = textBox.Text;
cmd.ExecuteNonQuery();
于 2012-05-16T14:01:12.830 に答える
1

パラメーターを自動的に使用する LINQ to SQL を使用して、SQL インジェクションの危険性を排除します。

また、SQL ステートメントを連結するよりもはるかに簡単に操作できます。

LINQ to SQL を使用すると、SQL インジェクションを防ぐことができますか

方法: データベースに行を挿入する (LINQ to SQL)

于 2012-05-16T13:58:16.170 に答える