2011-12-10 14 views
1

ビルドしているビデオプレーヤーの場合、Visual Studioのサーバーエクスプローラーで作成された.mp4ビデオファイルのデータベースがあります。テーブル内の各行の列を更新し、データベースに変更を保存する

  • ArtistName、
  • SongTitle、
  • hddPath、
  • songDuration:データベースは、次の列からなるシングル "ビデオ" のテーブルを持っています。

私はsongDuration列以外のすべてを手動で入力しました。私はビデオプレーヤーのコンポーネントを使用しています。このコンポーネントには、設定したプレーヤーに読み込まれた後に曲の再生時間を返すメソッドがあります。プレーヤーに気を使わずに、という電話番号(hddPathは文字列)がの形式のstringを返します。

私はテーブルの行をループすることができますし、各ステートメントのために各曲の時間を取得:

DataTable dt = myDataSet.Tables["Videos"]; 
foreach(DataRow row in dt.Rows) 
{ 
    component.loadsound(0, row["hddPath"].ToString()); // 0 represents the index 
                 // of the player 
    string duration = component.getduration(0); // gets the duration of the song 
               // loaded in player 0 
} 

しかし、どのように私は期間列で、各行の「hddPath」欄を更新し、それを保存しません私のデータベース?

+0

あなたの正確な問題は何ですか?私はあなたのデータベースを照会する方法を知っていると仮定しますか?あなたはデータを更新するSQLクエリを書く方法を尋ねていますか?それとも、C#コードが不足していますか? – Otiel

答えて

0

あなた

  • は、DataSet
  • に関連付けられたデータアダプターを持っているし、(CommandBuilderインスタンスを経由して例えば、)それに関連する更新コマンドを持って
  • と持続時間のためのDataTableの列を持っている場合

は、あなたがデータアダプターを経由してデータベースへの更新を送信することができます(とそれに新しい値を代入):

myDataAdapter.Update(myDataSet); 

DataAdapterを使用してデータセットを補充しなかった場合(これはOPのようです)、SqlCommandオブジェクトを介して直接コマンドを実行することもできます。それは次のようなものかもしれません。ループ内のパラメータ値を単純に更新し、毎回新しいコマンドオブジェクトを作成するのではなく、繰り返しごとにExecuteNonQueryメソッドを実行することに注意してください。私はプライマリキー(この例ではpk)があなたの特定のケースにどのようなものか確信しています。唯一のフィールドがOPに表示されているフィールドであれば、それはhddpathと思われます。それは、それが一意であるかのように聞こえるからです。

SqlConnection myConn = new SqlConnection(); 
SqlCommand myCmd = myConn.CreateCommand(); 
myCmd.CommandText = "update thetable set duration = @duration where [email protected]"; 
myCmd.CreateParameter(); 
SqlParameter duration = new SqlParameter("@duration", 1234); 
myCmd.Parameters.Add(duration); 
SqlParameter pk = new SqlParameter("@pk", 1); 
myCmd.Parameters.Add(pk); 
myCmd.ExecuteNonQuery(); 

SqlParameterオブジェクトには多数のオーバーロードがあります。適切なものを選んでください。

1

私はあなたの質問は実際に読むべきだと思います:「どのように各行のsongDuration列を更新しますか?」

その場合は、あなたは試してみました:

row["songDuration"] = component.getduration(0); 

をして、ループの外:

yourDataAdapter.Update(dt); 

データベースhereでレコードを更新する方法についての詳細があります。

0

このような何かを試してみてください:

あなたのupdateメソッドを作成し、このような何か:

private void UpdateDurationofMyHddPath(string hdpath,string duration) //Add other parameters that you need 
{ 
    // Your ado.net update sql stuff 
    //Update yourColum Set [email protected] where [email protected] 

} 

をあなたのループにメソッドを追加します。

DataTable dt = myDataSet.Tables["Videos"]; 
foreach(DataRow row in dt.Rows) 
{ 
    component.loadsound(0, row["hddPath"].ToString()); // 0 represents the index 
                 // of the player 
    string duration = component.getduration(0); // gets the duration of the song 
               // loaded in player 0 
    string hdpath = row["hddPath"].ToString(); 

    //Update hdpath duration 

    UpdateDurationofMyHddPath(hdpath,duration); 

} 

よろしく

関連する問題