2016-10-14 17 views
1

私はデータテーブルを持っています。この例のデータは
enter image description hereです。既存のデータを削除せずに、既存のデータをデータベースに追加できません

は、私はこのような他のデータを追加する必要があります。

enter image description here

既存のデータを削除せずに、データテーブルからその新しいデータをデータベースに追加するにはどうすればよいですか?
私のコード例ですが、このコードはすべてのデータをデータテーブルに保存します。そのため、データベースに重複データが作成されます。

if (dtEmailAddress.Rows.Count>0) 
     { 
      string strDBConfig = Application.StartupPath + @"\MedXPro.xml"; 
      string sql = "INSERT INTO AgencyEmailAddress (AgencyID, EmailAddress) VALUES (@AgencyID, @EmailAddress)"; 
      using (SqlConnection conn = PSCSClass.DataConnections.MDFConnection("", "", false, "", "", strDBConfig)) 
      { 
       foreach (DataRow row in dtEmailAddress.Rows) 
       { 
        SqlCommand cmd = conn.CreateCommand(); 
        cmd.CommandText = sql; 
        cmd.Parameters.AddWithValue("@AgencyID", row["AgencyID"]); 
        cmd.Parameters.AddWithValue("@EmailAddress", row["EmailAddress"]); 
        cmd.ExecuteNonQuery(); 
       } 
      } 
      dtEmailAddress.Rows.Clear(); 
     } 

答えて

0

私はあなたがこのように同じクエリ内のデータが存在するかどうかを確認することができ、最初の問題

誤解再読QUESTION 申し訳ありません後、私は私の答えを更新しました:

IF NOT EXISTS (SELECT * FROM AgencyEmailAddress WHERE EmailAddress = @EmailAddress) 

    INSERT INTO AgencyEmailAddress (AgencyID, EmailAddress) VALUES (@AgencyID, @EmailAddress) 
+1

これはコーディングの正しい方法ですか?存在しない場合は? –

+0

それは私にエラーSirを与える。申し訳ありません私はちょうどC#の初心者です –

+0

はい。 基本的に値がDBにあるかどうかチェックし、そうでない場合はINSERTを実行します –

1

基本的な考え方は、存在を確認し、1つのSQL文で更新または作成することです。このようなだけで何か:

BEGIN TRANSACTION; 
UPDATE dbo.AgencyEmailAddress SET EmailAddress WHERE AgencyID = @agencyId; 
IF @@ROWCOUNT = 0 
BEGIN 
    INSERT dbo.AgencyEmailAddress(AgencyID, EmailAddress) 
     SELECT @agencyId, @emailAddress; 
END 
COMMIT TRANSACTION; 

非常に不便かもしれC#コードからこれをやっているので、私は手順UpdateAgencyを作成しますとC#から呼び出します。

+0

こんにちは、私はこのコードを試してみますが、データベースに変更はありません。ここに私のコードがあります。 –

+0

SqlCommand sqlcmd =新しいSqlCommand( "saveEmail"、sqlcnn);sqlcmd.Parameters.Add(新しいSqlParameter( "@ agencyID"、行["AgencyID"]));sqlcmd.Parameters.Add(新しいSqlParameter( "@ emailAddress"、行["EmailAddress"]));sqlcmd.Parameters.Add(新しいSqlParameter( "@@ ROWCOUNT"、dtEmailAddress.Rows.Count)); sqlcmd.CommandType = CommandType.StoredProcedure; –

+0

SqlDataReader sqldr = sqlcmd.ExecuteReader(); –

関連する問題