2016-08-03 14 views
-2

where句を使用して、データベースの特定の行にデータを追加する方法を教えてください。ここでWhere句を使用してSQLデータベースにデータを挿入します。

は、私が試したものです:

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"') 
where (name ='"+textbox1.Text+"')" 
+1

正確に「機能しなかった」とは何ですか?どのようなエラーがありましたか? – Alex

+0

ここにはどのようなウィンドウ形式がありますか? – elyashiv

+3

[Where節を挿入する方法]の可能な複製(http://stackoverflow.com/questions/545593/how-to-insert-with-where-clause) –

答えて

1

あなたは「どこ」句inseertに挿入することはできませんが、新しいレコードを追加するためです。あなたの更新は、次に使用する場合:

Update table1 set 
name = '" + textbox1.Text + "', 
address ='" + textbox2.Text+ "' 
where (name ='"+textbox1.Text+"') 

または挿入する必要があります:

"Insert into table1 (name, address) values ('" + textbox1.Text+  
"','"+textbox2.Text+"')" 

しかし、すべてがSQLインジェクションに対して検証されていることを確認します。上記をパラメータ化する。

+0

おそらく、元のユーザーと同じ欠陥を使用して解決策を提供するのではなく、パラメータ化を実証することをお勧めします。 – Takarii

4

まず、データベース入力用の文字列を決して連結しないでください。それはSQLインジェクション攻撃に対してあなたを広げてくれます。詳細については、this MSDN articleを参照してください。

第2に、WHERE句の挿入は行いません。あなたはWHERE

例でUPDATEを行うことができます:

INSERT INTO TABLE (col1, col2) VALUES (val1, val2) 

UPDATE TABLE SET col1 = val1, col2 = val2 WHERE col3 = somevalue 

は、あなたのケースでは、たとえば、あなたは

sql = "INSERT INTO table1 (name, address) VALUES (@textbox1,@textbox2)"; 

SqlCommand query = new SqlCommand("connection string", sql); 

query.Parameters.AddWithValue(@textbox1, textbox1.Text); 
query.Parameters.AddWithValue(@textbox2, textbox2.Text); 

あなたが知っている場合(パラメータを含む)の挿入のためにこれを書きたいと思いますAddWithValueの代わりにデータベースのフィールドタイプを使用する代わりに、次の構文を使用します。

query.Parameters.Add(@parametername, SqlDBType.Type,size).Value = somevalue; 

ここで、SqlDBType.Typeはデータベースのフィールドタイプ(VarChar、Int、VarBinaryなど)で、sizeはフィールドの値です。私のDBフィールドはVARCHAR(500)であった場合は、その後、私のパラメータ設定は

query.Parameters.Add(@parametername, SqlDBType.VarChar, 500).Value = somevalue; 

になります。更新ではなく、挿入したい場合は、以下でSQL文字列を置き換えることができます。注:識別子を使用してレコードを更新する - nameWHERE句として使用することは悪い習慣です。

sql = "UPDATE table1 SET name = @textbox1, address = @textbox2 WHERE xyz"; 

パラメータを使用すると、予期しない値をボックスに入れて不正なコードを実行することを防ぐことができます。現在のように連結された文字列を使用すると、攻撃者がデータベース全体を侵害する可能性があります。

+0

Upvotedの代わりに[Parameters.Add](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v = vs.110).aspx)を使用することをお勧めします。 AddWithValueを使用して、パラメータのSqlDbTypeを指定します。 AddWithValueは、古い関連の質問に基づいた特定のシナリオAFAIKでいくつかの問題を引き起こすことが知られています。 –

+0

私はそれがdbtypeが何であるかを知らないことが原因でした。そうでなければ、私は常にsqldbtype.typeを追加して、それを反映するために私の答えを更新します。 – Takarii

0

INSERTステートメントを使用してSQL Serverデータベースにレコードを挿入する場合、where句は必要ありません。あなたはそれを動作させるために、以下のようにコードを変更する必要があります。

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"') 

にSQLのINSERT文の2つの形式を以下の通りです:

INSERT INTO table_name (column1,column2,column3,...) 
VALUES (value1,value2,value3,...); 


INSERT INTO table_name 
VALUES (value1,value2,value3,...); 

あなたがここにINSERT SQL文についての詳細を学ぶことができます。

http://www.w3schools.com/sql/sql_insert.asp

関連する問題