2017-09-18 11 views
0

外部キーテーブルにデータを挿入するにはどうすればよいですか?外部キーテーブルにデータを挿入するVB.NET

私は2つのデータベースAddemployeesのテーブルとNormal_Lを持っているがID.IはIDがAddemployees表に関連したままでなければならないNormal_L表にデータを挿入したいされた1人の関係が含まれています。

Dim cmd As New System.Data.SqlClient.SqlCommand 
    Dim RA As Integer 
    Try 
     cn.Open() 
     cmd.CommandType = System.Data.CommandType.Text 
     If Me.RadioButton1.Checked Then 
      cmd = New SqlCommand("INSERT into Normal_L (fromD,toD,DScrip) VALUES ('" & DateTimePicker2.Text & "','" & DateTimePicker1.Text & "','" & TextBox5.Text & "') where ID ='" & ComboBox1.Text & "' ", cn) 
      cmd.Connection = cn 
      RA = cmd.ExecuteNonQuery() 
      MessageBox.Show("Process successful!", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information) 
      cn.Close() 
     End If 
    Catch 
     MessageBox.Show("Error!", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 

    TextBox3.Clear() 
    TextBox4.Clear() 
    TextBox5.Clear() 

End Sub 

私はあなたはそれが適切のようなストアドプロシージャを使用したいと思うので、もしあなたがさてさてその

+1

ここには存在しません。外部キーでは、キーがAddemployeesに存在しない場合、Normal_Lに挿入することはできません。 Normal_L.IDの外部キーの制約が – sapi

+0

と一致しない場合、エラーが発生することに注意してください。 –

答えて

1

で私を助けることができることを願っています:

CREATE PROCEDURE [dbo].[YourProcName] 
    -- Add the parameters for the stored procedure here 
    @fromD nvarchar(50), --yourType 
    @toD nvarchar(50), --Type 
    @DScrip nvarchar(50), --yourType 
    @ID int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    INSERT into Normal_L (fromD,toD,DScrip) 
    SELECT @fromD , 
      @toD, 
      @DScrip 
    FROM Addemployees 
    WHERE Addemployees.ID = @ID 
END 

このストアドプロシージャだけでなく防ぐことができますあなたの前のコードからのSQLインジェクション。ただし、クローズドルを読むと、AddemployeeのIDがあなたのパラメータと一致する場合にのみ、selectは何かを選択します。もう一度単純な外来キーを使うことができますが、私はあなたの基盤の構造を知っていません。あなたのVBのコードになりまし

Dim cmd As New System.Data.SqlClient.SqlCommand 
    Dim RA As Integer 
    Try 
     cn.Open() 
     cmd.CommandType = System.Data.CommandType.StoredProcedure 
     If Me.RadioButton1.Checked Then 
      cmd = New SqlCommand("YourProcName", cn) 
      cmd.Connection = cn 
      cmd.Parameters.AddWithValue("@fromD", DateTimePicker2.Text) 
      cmd.Parameters.AddWithValue("@toD",DateTimePicker1.Text) 
      cmd.Parameters.AddWithValue("@DScrip",TextBox5.Text) 
      cmd.Parameters.AddWithValue("@ID", ComboBox1.Text) 
      RA = cmd.ExecuteNonQuery() 
      MessageBox.Show("Process successful!", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information) 
      cn.Close() 
     End If 
    Catch 
     MessageBox.Show("Error!", "exit", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    End Try 

    TextBox3.Clear() 
    TextBox4.Clear() 
    TextBox5.Clear() 

End Sub 

あなたは私はあなたが使用しているか知らないストアドプロシージャ内の型を変更する必要があります。最終的なコードは大雑把に見えるはずです。

願っています。

関連する問題