2016-05-05 7 views
0

私は4列のSQLテーブルを持っています。 4番目の列はFullNameです。このコラムを2列目と3列目の結果から自動入力します。すなわち、FirstnameとMiddlename。2つの列を結合する

私は、セクションCONCATINATEは次のようになります一つの変数

cn.Open() 
Dim query As String 
Dim fullname As String 
fullname = TextBox1.text + "" + TextBox2.text 
query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES ('" & TextBox1.Text & "' , '" & TextBox2.Text & "', '" & TextBox3.Text & " ', '" & fullname & '")" 
cmd = New SqlCommand(query, cn) 
reader = cmd.ExecuteReader 
MessageBox.Show("Data Saved") 
+1

a)それを投げ捨ててSQLパラメータを使用します。そのコードは非常に多くの名前で失敗し、SQLインジェクションに脆弱ですb)言及していないDBによると、おそらく 'CONCATE'ではなく' CONCAT'でしょう - 構文をチェックする必要があります変更することができます。 – Plutonix

+0

フルネームは、ファーストネームとミッドネームをコンマまたはより伝統的なスペースで区切ります。例: "Henry、Gathigira"または "Henry Gathigira"が正しいFullnameですか? –

答えて

1

にクエリ最初の店舗2つのテキストボックスの値の前にこのコード

cn.Open() 
Dim query As String 
query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES ('" & TextBox1.Text & "' , '" & TextBox2.Text & "', '" & TextBox3.Text & " ', CONCATE(Textbox2.text, ',', Textbox3.Text))" 
cmd = New SqlCommand(query, cn) 
reader = cmd.ExecuteReader 
MessageBox.Show("Data Saved") 
0

を試してみました:

"CONCATE('" & Textbox2.text &"',',','" & Textbox3.Text & "'))" 

しかし、私はこれが最悪の提案かもしれないので、このような使い方をあなたに言いません。注射を避けて型を指定するためにもパラメータを使用することをお勧めします。

例:

Dim query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES (" & _ 
      "@adm,@fName,@mName,CONCATE(@fNameC,',',@mNameC))" 
Dim cmd As New SqlCommand(query, cn) 
cmd.Parameters.Add("@adm", SqlDbType.VarChar).Value = TextBox1.Text 
cmd.Parameters.Add("@fName", SqlDbType.VarChar).Value = TextBox2.Text 
cmd.Parameters.Add("@mName", SqlDbType.VarChar).Value = TextBox3.Text 
cmd.Parameters.Add("@fNameC", SqlDbType.VarChar).Value = TextBox2.Text 
cmd.Parameters.Add("@mNameC", SqlDbType.VarChar).Value = TextBox3.Text 
'Execute the query here 
+1

注射をどのように扱うか –

0

あなたがString.Concatで連結することができます、と私はあなたがこのように、SQLインジェクションを防ぐためにParameterを使用するようにアドバイス:変数に

cn.Open() 
Dim query As String 
query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES (@Adm,@FirstName,@MiddleName,@FullName)" 
cmd = New SqlCommand(query, cn) 
cmd.Parameters.Add(New SqlParameter("@Adm", TextBox1.Text)) 
cmd.Parameters.Add(New SqlParameter("@FirstName", TextBox2.Text)) 
cmd.Parameters.Add(New SqlParameter("@MiddleName", TextBox3.Text)) 
cmd.Parameters.Add(New SqlParameter("@FullName", String.Concat(TextBox2.Text, ",", TextBox3.Text))) 
reader = cmd.ExecuteReader 
MessageBox.Show("Data Saved") 
0

保存FirstNameおよびMiddlename値クエリーに送信する前に一緒にconcat()

cn.Open() 
Dim query As String 
Dim firstname As String 
Dim middlename As String 
Dim fullname As String 
query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES (@Adm,@FirstName,@MiddleName,@FullName)" 

firstname = TextBox2.Text 
middlename = TextBox3.Text 
fullname = String.Concat(firstname, ",", middlename) 

cmd = New SqlCommand(query, cn) 
cmd.Parameters.Add(New SqlParameter("@Adm", TextBox1.Text)) 
cmd.Parameters.Add(New SqlParameter("@FirstName", firstname)) 
cmd.Parameters.Add(New SqlParameter("@MiddleName",middlename)) 
cmd.Parameters.Add(New SqlParameter("@FullName", fullname)) 
reader = cmd.ExecuteReader 
MessageBox.Show("Data Saved") 

クエリビルダは、SQLインジェクションの脆弱性を取り除くために再フォーマットされています。

0

あなたの代わりに次の行を使用してください。

query = "Insert into Details(Adm,FirstName,MiddleName,FullName) VALUES ('" & TextBox1.Text & "' , '" & TextBox2.Text & "', '" & TextBox3.Text & " ', '" & Textbox2.Text & " " & Textbox3.Text & "')" 
関連する問題