我的一位同事有这个问题。请检查下面的代码
foreach (GridViewRow grv in grvCatalogUpload.Rows)
{
Label lblVariantName = (Label)grv.FindControl("lblVariantName");
Label lblDesciption = (Label)grv.FindControl("lblDesciption");
//...get all controls from grid..//
ent = new TempVariantMst();
string fpath = string.Empty;
string extension = string.Empty;
string fileName = string.Empty;
fpath = ViewState[vs_DirName].ToString() + "//" + lblImageName.Text;
extension = Path.GetExtension(fpath);
string tick = string.Empty;
tick = DateTime.Now.Ticks.ToString();
//-------------same tick on 3rd,4th iteration---------------------//
fileName = tick+ extension;
//-------------same tick on 3rd,4th iteration---------------------//
logger.ErrorFormat("fpath, Details error:{0}{1} ", Environment.NewLine, fpath);
logger.ErrorFormat("Server.MapPath(FolderPath + fileName), Details error:{0}{1} ", Environment.NewLine, Server.MapPath("~/" + FolderPath + fileName));
System.IO.File.Copy(fpath, Server.MapPath("~/" + FolderPath + fileName));
ent.ImagePath = fileName;
//...set ent..//
adminService = new AdminService();
adminService.InsertTempVariantMst(ent);
}
我已经看到同样的问题here,但那里的答案表明处理器速度很快,因此滴答值在迭代之间不会改变。
这里我们正在保存一个文件并在DB中插入数据,这应该花费更多的时间,因此tick值应该是不同的而不是。现在作为临时解决方案,我们添加了gridview行索引,带有tick
答案 0 :(得分:0)
我建议您使用GUID代替DateTime.Ticks
来获取您的唯一名称 - 否则,如果数据库代码运行速度超出预期,您将发生冲突。
类似的东西:
fileName = Guid.NewGuid().ToString() + grv.RowIndex.ToString() + extension;
这将为您提供有保证的唯一文件名。