2016-07-16 25 views
-1

私はここC#でSQLを学習していますが、少し問題があります。私は既存のデータを上書きすることなく、SQLテーブルにデータを挿入する方法を理解できません。C#SQLヘルプ! Insert Intoが既存のデータを上書きしています

私はテーブルに値を簡単に追加することができます。私はテストのためにデータを設定するメソッドを作成し、500個の値を簡単かつ迅速に追加することもできます。しかし、再度実行すると、それに。誰かが私は単にそれを上書きすることなく、既存のテーブルに追加する何をする必要があるか私に言うことができる場合は、任意のヘルプは大幅に

public static void AddSongViaClass(Songs s) 
    { 
     string conStr = "TestSQL.Properties.Settings.ArtistConnectionString"; 
     using (SqlConnection sqlcon = new SqlConnection(GetConnectionString(conStr))) 
     { 

      sqlcon.Open(); 

      try 
      { 
       string query = "INSERT INTO Songs (Name, Id, Album, TrackNumber, TrackNumberCount, Genre, Rating, Tags, Subject, Categories, Comments, FileName, FolderName, FolderPath, FullPath, Length, PlayCount, SkipCount, LastPlayed)"; 
       query += " VALUES (@Name, @Id, @Album, @TrackNumber, @TrackNumberCount, @Genre, @Rating, @Tags, @Subject, @Categories, @Comments, @FileName, @FolderName, @FolderPath, @FullPath, @Length, @PlayCount, @SkipCount, @LastPlayed)"; 

       using (SqlCommand cmd = new SqlCommand(query, sqlcon)) 
       { 
        cmd.Parameters.Add(new SqlParameter("Name", s.Name)); 
        cmd.Parameters.Add(new SqlParameter("Id", s.Id)); 
        cmd.Parameters.Add(new SqlParameter("Album", s.Album)); 
        cmd.Parameters.Add(new SqlParameter("TrackNumber", s.TrackNumber)); 
        cmd.Parameters.Add(new SqlParameter("TrackNumberCount", s.TrackNumberCount)); 
        cmd.Parameters.Add(new SqlParameter("Genre",s.Genre)); 
        cmd.Parameters.Add(new SqlParameter("Rating", s.Rating)); 
        cmd.Parameters.Add(new SqlParameter("Tags", s.Tags)); 
        cmd.Parameters.Add(new SqlParameter("Subject", s.Subject)); 
        cmd.Parameters.Add(new SqlParameter("Categories", s.Categories)); 
        cmd.Parameters.Add(new SqlParameter("Comments", s.Comments)); 
        cmd.Parameters.Add(new SqlParameter("FileName", s.FileName)); 
        cmd.Parameters.Add(new SqlParameter("FolderName", s.FolderName)); 
        cmd.Parameters.Add(new SqlParameter("FolderPath", s.FolderPath)); 
        cmd.Parameters.Add(new SqlParameter("FullPath", s.FullPath)); 
        cmd.Parameters.Add(new SqlParameter("Length", s.Length)); 
        cmd.Parameters.Add(new SqlParameter("PlayCount", s.PlayCount)); 
        cmd.Parameters.Add(new SqlParameter("SkipCount", s.SkipCount)); 
        cmd.Parameters.Add(new SqlParameter("LastPlayed", s.LastPlayed)); 

        cmd.ExecuteNonQuery(); 
        sqlcon.Close(); 

       } 

      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Count not insert. {0}", s.Name); 
       Console.WriteLine("Error Message {0}", ex.Message); 
      } 


     } 
    } 

を充当することになります。

は、ここに私のコードです。ありがとうございました!

あなたは好奇心旺盛であれば、これはすぐに私のテーブルを取り込むための私の方法です:

public static void JustDoIt() 
    { 
     Songs s = new Songs(); 
     for (int i = 1; i <= 500; i++) 
     { 

      s.Name = "My Song Name " + i.ToString("D3"); 
      s.Id = i.ToString(); 
      s.Album = "My Song's Album " + i.ToString("D3"); 
      s.TrackNumber = (i%13 == 0 ? 1: i%13).ToString("D3"); 
      s.TrackNumberCount = "12"; 
      s.Genre = "Something"; 
      s.Rating = (i%20/100*i).ToString("D3"); 
      s.Tags = "Tags " + i.ToString("D3") + " and more tags"; 
      s.Subject = "Subjects"; 
      s.Categories = "Categories"; 
      s.Comments = "Comments"; 
      s.FileName = "Ashes Remain - Christmas - 02 - Gift of Love.mp3"; 
      s.FolderName = "My folder name"; 
      s.FolderPath = @"L:\Dropbox\Music\00- Sync'd Music\Ashes Remain"; 
      s.FullPath = s.FolderName + "\\" + s.FolderPath; 
      s.Length = "3:" + i/60; 
      s.PlayCount = "12"; 
      s.SkipCount = "1"; 
      s.LastPlayed = DateTime.Now.ToString(); 

      SQL_AddNewRecord.AddSongViaClass(s); 
      Console.WriteLine(i); 

     } 
    } 

ありがとう!

+1

は、主キーとして「ID」を聞かせて、そのために自動インクリメントを使用します。 –

+0

エラーが発生していますか?私はあなたのSQL tqbleの構造が分かりませんが、あなたが手作業でs.idを設定していることがわかります。それはIDキーの場合には変だと思われます。 – Massanu

+0

接続文字列を表示できますか?これはデスクトップアプリですか、ウェブアプリですか? – Steve

答えて

0

それを試してみてください。

  using (SqlCommand cmd = new SqlCommand(query, sqlcon)) 
      { 
       cmd.Parameters.Add(new SqlParameter("Name", s.Name)); 
       cmd.Parameters.Add(new SqlParameter("Id", s.Id)); 
       cmd.Parameters.Add(new SqlParameter("Album", s.Album)); 
       cmd.Parameters.Add(new SqlParameter("TrackNumber", s.TrackNumber)); 
       cmd.Parameters.Add(new SqlParameter("TrackNumberCount", s.TrackNumberCount)); 
       cmd.Parameters.Add(new SqlParameter("Genre", s.Genre)); 
       cmd.Parameters.Add(new SqlParameter("Rating", s.Rating)); 
       cmd.Parameters.Add(new SqlParameter("Tags", s.Tags)); 
       cmd.Parameters.Add(new SqlParameter("Subject", s.Subject)); 
       cmd.Parameters.Add(new SqlParameter("Categories", s.Categories)); 
       cmd.Parameters.Add(new SqlParameter("Comments", s.Comments)); 
       cmd.Parameters.Add(new SqlParameter("FileName", s.FileName)); 
       cmd.Parameters.Add(new SqlParameter("FolderName", s.FolderName)); 
       cmd.Parameters.Add(new SqlParameter("FolderPath", s.FolderPath)); 
       cmd.Parameters.Add(new SqlParameter("FullPath", s.FullPath)); 
       cmd.Parameters.Add(new SqlParameter("Length", s.Length)); 
       cmd.Parameters.Add(new SqlParameter("PlayCount", s.PlayCount)); 
       cmd.Parameters.Add(new SqlParameter("SkipCount", s.SkipCount)); 
       cmd.Parameters.Add(new SqlParameter("LastPlayed", s.LastPlayed)); 

       cmd.ExecuteNonQuery(); 
       for (int i = 1; i <= 500; i++) 
       { 
        cmd.Parameters["Name"].Value = "My Song Name " + i.ToString("D3"); 
        cmd.Parameters["Id"].Value = i.ToString(); 
        ...All parameters... 
        cmd.ExecuteNonQuery(); 
       } 

       sqlcon.Close(); 
+0

こんにちは、私はあなたの提案を試み、それはエラーでいっぱいです。エラーをコンパイルしないで、トラップに遭遇したエラーだけです。ここには500種類のうち1つがあります。エラーメッセージこのSqlParameterCollectionには、 'Id'というParameterNameを持つSqlParameterは含まれていません。さらに悪いことに。自分の反復を500から100に変更したので、DBに100を挿入しただけです。私がそれを開いたとき、私は1から100を上書きし、200から500を手つかずであると予想しましたが、DBには1から100しかないことがわかりました。 200から500は消えた。テーブル全体をダンプするのとほぼ同じです。 –

+0

今、私は何をしているのか分かりません。私は自分のbin \ debugフォルダのdbを見ていて、ソリューションのフォルダのdbは見ていないことに気付きました。それは人口が増えていて、デバッガを走らせるたびに* New *だったことが理にかなっています。さて、私はそれを私のソリューションのフォルダのメインDBに更新するようにしようとしています。 –

+0

だから、魔法が起こった。私は誰かのアドバイスを取って、MS Sql Mgmt studioを使って自分のDBとテーブルを作成しました。私はそれを切り離し、それをある場所に置いた。私はVSに接続を追加し、私が取り組んでいた他のすべてのDBを削除しました。接続を追加したときに、私のプロジェクトでそのdbをインポートするかどうか尋ねられました。私はNO!私がそれをした後、プログラムを走らせて、**すべて**アップデートが完璧です。野生のガチョウの追跡に皆を入れて申し訳ありません、あなたの助けに感謝! –

関連する問題