更新表中每行的列并保存数据库中的更改

时间:2011-12-10 00:09:38

标签: c# sql-server winforms visual-studio

对于我正在构建的视频播放器,我有一个在Visual Studio的服务器资源管理器中创建的.mp4视频文件数据库。该数据库有一个“视频”表,由以下列组成:

  • ArtistName,
  • SongTitle,
  • hddPath,
  • songDuration。

我已手动填充除“歌曲持续时间”列以外的所有内容。我正在为我的视频播放器使用一个组件,该组件有一个方法可以在将歌曲加载到我设置的播放器中之后返回歌曲的持续时间。不要打扰播放器,请记住,component.getduration(hddPath),其中hddPath是一个字符串,以下列格式返回stringhh:mm:ss

我可以遍历表格行并获取每首歌曲的持续时间:

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”列并将其保存在我的数据库中?

3 个答案:

答案 0 :(得分:1)

我认为您的问题实际上应该是:“如何更新每一行的songDuration列。”

如果是这种情况,那么你试过了吗?

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

然后在循环之外:

yourDataAdapter.Update(dt);

有关如何更新数据库here中的记录的更多信息。

答案 1 :(得分:0)

如果你

  • 有一个与DataSet相关联的DataAdapter
  • 并具有与之关联的更新命令(例如,通过CommandBuilder实例)
  • 并在DataTable中有一段持续时间(并为其分配新值)

然后您可以通过DataAdapter将更新发送到数据库:

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 pk=@pk";
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对象有许多重载。选择合适的一个。

答案 2 :(得分:0)

尝试这样的事情:

创建这样的更新方法:

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

 }

在循环中添加方法:

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);

}

此致