数据库只存储文件一些基本信息,真正文件是存储在目录中,因此记录被更新或是删除时,同时也需要对存储在目录中的文件进行操作,如移动或删除等。
在上传时,建议先存记录,再存文件至目录中,在删除记录时,顺序应刚好相反,首先删除目录中的文件,然后删除记录。这也不是一定如此。
下面代码演示,在记录更新时,记录的存储目录发生变化,文件也作相应移动。
//
取得更新记录主键
strPrimaryKey = gvMedia.DataKeys[e.RowIndex].Value.ToString();
// 类别,文件是随类别存储,如果类别有更新,说明文件存储目录随之改变
string mediatypeId = ((DropDownList)gvMedia.Rows[e.RowIndex].FindControl( " ddlMediaType " )).SelectedItem.Value;
// 标题
string subject = ((TextBox)gvMedia.Rows[e.RowIndex].FindControl( " txtSubject " )).Text.Trim();
// 说明
string description = ((TextBox)gvMedia.Rows[e.RowIndex].FindControl( " txtDescription " )).Text.Trim();
// 新目录
string directory = Mediadirectory + mediatypeId + " / " ;
// 如果目录有改变,存储文件也同时移动
DataRow objDataRow = objMedia.GetFileByPrimaryKey(strPrimaryKey).Rows[ 0 ];
// 比较目录是否发生变化,如果不一样,文件也应随目录变化而移动
if ( string .Compare(objDataRow[ " Directory " ].ToString(), directory, true ) != 0 )
{
// 旧文件路径
string o_f = objDataRow[ " Directory " ].ToString() + objDataRow[ " NewFileName " ].ToString();
// 新文件路径
string n_f = Mediadirectory + mediatypeId + " / " + objDataRow[ " NewFileName " ].ToString();
// 移动文件
File.Move(Server.MapPath(o_f), Server.MapPath(n_f));
}
try
{
// 更新数据库记录
objMedia.Update(strPrimaryKey, mediatypeId, subject, description, directory);
objInsusJsUtility.JsAlert( " 记录成功更新。 " );
}
catch (Exception ex)
{
// 抛出异常
objInsusJsUtility.JsAlert(ex.Message);
}
strPrimaryKey = gvMedia.DataKeys[e.RowIndex].Value.ToString();
// 类别,文件是随类别存储,如果类别有更新,说明文件存储目录随之改变
string mediatypeId = ((DropDownList)gvMedia.Rows[e.RowIndex].FindControl( " ddlMediaType " )).SelectedItem.Value;
// 标题
string subject = ((TextBox)gvMedia.Rows[e.RowIndex].FindControl( " txtSubject " )).Text.Trim();
// 说明
string description = ((TextBox)gvMedia.Rows[e.RowIndex].FindControl( " txtDescription " )).Text.Trim();
// 新目录
string directory = Mediadirectory + mediatypeId + " / " ;
// 如果目录有改变,存储文件也同时移动
DataRow objDataRow = objMedia.GetFileByPrimaryKey(strPrimaryKey).Rows[ 0 ];
// 比较目录是否发生变化,如果不一样,文件也应随目录变化而移动
if ( string .Compare(objDataRow[ " Directory " ].ToString(), directory, true ) != 0 )
{
// 旧文件路径
string o_f = objDataRow[ " Directory " ].ToString() + objDataRow[ " NewFileName " ].ToString();
// 新文件路径
string n_f = Mediadirectory + mediatypeId + " / " + objDataRow[ " NewFileName " ].ToString();
// 移动文件
File.Move(Server.MapPath(o_f), Server.MapPath(n_f));
}
try
{
// 更新数据库记录
objMedia.Update(strPrimaryKey, mediatypeId, subject, description, directory);
objInsusJsUtility.JsAlert( " 记录成功更新。 " );
}
catch (Exception ex)
{
// 抛出异常
objInsusJsUtility.JsAlert(ex.Message);
}
接下来,演示删除记录:
try
{
// 取得被删除记录的主键
strPrimaryKey = gvMedia.DataKeys[e.RowIndex].Value.ToString();
// 取得删除记录
DataRow objDataRow = objMedia.GetFileByPrimaryKey(strPrimaryKey).Rows[ 0 ];
// 取得文件路径
string f_Name = objDataRow[ " Directory " ].ToString() + objDataRow[ " NewFileName " ].ToString();
// 删除文件
File.Delete(Server.MapPath(f_Name));
// 删除数据库记录
objMedia.Delete(strPrimaryKey);
objInsusJsUtility.JsAlert( " 记录成功删除。 " );
}
catch (Exception ex)
{
// 抛出异常
objInsusJsUtility.JsAlert(ex.Message);
}
{
// 取得被删除记录的主键
strPrimaryKey = gvMedia.DataKeys[e.RowIndex].Value.ToString();
// 取得删除记录
DataRow objDataRow = objMedia.GetFileByPrimaryKey(strPrimaryKey).Rows[ 0 ];
// 取得文件路径
string f_Name = objDataRow[ " Directory " ].ToString() + objDataRow[ " NewFileName " ].ToString();
// 删除文件
File.Delete(Server.MapPath(f_Name));
// 删除数据库记录
objMedia.Delete(strPrimaryKey);
objInsusJsUtility.JsAlert( " 记录成功删除。 " );
}
catch (Exception ex)
{
// 抛出异常
objInsusJsUtility.JsAlert(ex.Message);
}