2011-11-14 9 views
0

私は簡単なasp.netフォームを作成しました。ユーザーはトレーニングの日付のリストを表示し、その日付に登録することができます。彼らは自分の名前と従業員IDを手動で入力します(dulpicate employeのIDS)ので、私は、C#でこれを確認する方法を理解する必要があります。..sqlデータベースを挿入する前に既存のレコードを確認します

コード:

public string GetConnectionString() 
    { 
     //sets the connection string from your web config file "ConnString" is the name of your Connection String 
     return System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 


    } 

    private void checkContraint() 
    { 

     SqlConnection conn = new SqlConnection(GetConnectionString()); 
     string sql = "Select "; //NEED HELP HERE 

    } 


    private void InsertInfo() 
    { 
     var dateSelected = dpDate.SelectedItem.Value; 
     SqlConnection conn = new SqlConnection(GetConnectionString()); 

     string sql = "INSERT INTO personTraining (name,department,title,employeeid,training_id, training,trainingDate,trainingHour, trainingSession)SELECT @Val1b+','[email protected],@Val2,@Val3,@Val4,training_id,training,trainingDate,trainingHour,trainingSession FROM tbl_training WHERE training_id [email protected]_id "; 


     try 
     { 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(sql, conn); 


      cmd.Parameters.AddWithValue("@Val1", txtName.Text); 
      cmd.Parameters.AddWithValue("@Val1b", txtLname.Text); 
      cmd.Parameters.AddWithValue("@Val2", txtDept.Text); 
      cmd.Parameters.AddWithValue("@Val3", txtTitle.Text); 
      cmd.Parameters.AddWithValue("@Val4", txtEmployeeID.Text); 

      //Parameter to pass for the select statement 
      cmd.Parameters.AddWithValue("@training_id", dateSelected); 
      cmd.CommandType = CommandType.Text; 
      //cmd.ExecuteNonQuery(); 

      int rowsAffected = cmd.ExecuteNonQuery(); 
      if (rowsAffected == 1) 
      { 

       //Success notification   // Sends user to redirect page 

       Response.Redirect(Button1.CommandArgument.ToString()); 
       ClearForm(); 
      } 
      else 
      { 
       //Error notification  

      } 
     } 
     catch (System.Data.SqlClient.SqlException ex) 
     { 
      string msg = "Insert Error:"; 
      msg += ex.Message; 
      throw new Exception(msg); 

     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 

     checkContraint(); 
     InsertInfo(); 
+0

従業員IDごとにセッションごとに1つのトレーニングに制限する必要がありましたか?または、日付ごと、セッションごとに1つ、など? –

+0

テーブル全体で1人の従業員ID(ユニーク)を制限してください – user959443

+0

Royiの答えがそうですね。チェック制約メソッドの個別の検証クエリではありませんが、InsertInfoのエラー通知ハンドラにヒットするはずです。 –

答えて

3

この方法、あなたのクエリがすでに

string sql = "INSERT INTO personTraining (name,department,title,employeeid,training_id, training,trainingDate,trainingHour, trainingSession)SELECT @Val1b+','[email protected],@Val2,@Val3,@Val4,training_id,training,trainingDate,trainingHour,trainingSession FROM tbl_training WHERE training_id [email protected]_id and not exists (select 1 from personTraining pp where pp [email protected]) "; 
存在しない場合にのみ、データを挿入します
+0

personTraining ppからselect 1を見たことはありません。pp .employeeid = @ Val4 ....それは何をしますか? – user959443

+0

'xxxxx'を 'vvvvvvvv'テーブルに挿入しますが、 'ccccc'と指定された従業員IDのレコードが既に存在しない場合のみ –

+0

1とは何ですか? – user959443

関連する問題