老问题了,请路过的帮忙看看,顶的也有分

WWWDJ1983 2007-01-05 02:35:31
public void CreatTable()
{
upfiles = new DataTable("upfile");
DataColumn[] keys = new DataColumn[1];
keys[0] = upfiles.Columns.Add("filename", typeof(string));
keys[0].AllowDBNull = false;
upfiles.PrimaryKey = keys;
upfiles.Columns.Add("filestream", typeof(Stream));
fname.Text = "";
}
/// <summary>
/// 增加附件到列表
/// </summary>
private void AddFile()
{
if (upfiles == null)
{
CreatTable();
}
if (myFile.PostedFile.FileName != "")
{
string nam = myFile.PostedFile.FileName;
int i = nam.LastIndexOf("\\");
string filename = nam.Substring(i + 1);
if (upfiles.Rows.Find(filename) == null)
{
Stream fstream = myFile.PostedFile.InputStream;
DataRow dr = upfiles.NewRow();
dr[0] = filename;//获取文件名
upfiles.Rows.Add(dr);//增加
ArrayList dc = new ArrayList();
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow df = upfiles.Rows[j];
dc.Add(df[0].ToString());
}
files.DataSource = dc;
files.DataBind();
}
}
}
/// <summary>
/// 从列表移除附件
/// </summary>
private void RemoveFile()
{
if (files.SelectedItem.Value != null)
{
string fname = files.SelectedItem.Value;
DataRow foundRow = upfiles.Rows.Find(fname);
if (foundRow != null)
upfiles.Rows.Remove(foundRow);
ArrayList dc = new ArrayList();
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow df = upfiles.Rows[j];
dc.Add(df[0].ToString());
}
files.DataSource = dc;
files.DataBind();
}
}
/// <summary>
/// 发送邮件
/// </summary>
private void UploadFile()
{
string userId = this.GetSessionState("userId");
if (upfiles.Rows.Count > 0)
{
fname.Text = "";
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow dr = upfiles.Rows[j];
string topath = Server.MapPath((this.GetSessionState("userId") + "/") + dr[0]); //设置附件路径
fname.Text += topath.ToString() + ";";
myFile.PostedFile.SaveAs(topath); //保存附件

}

当我把"多附件上传地址" fname.Text 插入到数据库中,会出现下列情况:
比如说:我一次上传了3个文件的时候在数据库中会生成3行纪录:
A:/aaa;
A:/aaa;B:/bbb;
A:/aaa;B:/bbb;C:/ccc;
而我想要的是每次上传在数据库只生成一行纪录,如:
A:/aaa;B:/bbb;C:/ccc;
请大哥大姐们帮忙看看
...全文
249 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWDJ1983 2007-01-05
  • 打赏
  • 举报
回复
结的快了,后面帮顶的大哥,没来的及看到,不好意思~~
byhum 2007-01-05
  • 打赏
  • 举报
回复
帮顶
terry52 2007-01-05
  • 打赏
  • 举报
回复
解决就好~~
结贴给分了
HJS1820 2007-01-05
  • 打赏
  • 举报
回复
路過.
bobomouse 2007-01-05
  • 打赏
  • 举报
回复
路过
WWWDJ1983 2007-01-05
  • 打赏
  • 举报
回复
谢谢各位大哥啊,解决了,结贴
leaohong 2007-01-05
  • 打赏
  • 举报
回复
是啊,循环外操作数据库呗,前面加个判断,FOR外添加好了
  • 打赏
  • 举报
回复
使用stringbuilder.appendtext 每次都追加 filename就可以了

dr[0] = filename ,filename就应该是stringbuilder.tostring了
yan63 2007-01-05
  • 打赏
  • 举报
回复
比如说:我一次上传了3个文件的时候在数据库中会生成3行纪录:
A:/aaa;
A:/aaa;B:/bbb;
A:/aaa;B:/bbb;C:/ccc;
而我想要的是每次上传在数据库只生成一行纪录,如:
A:/aaa;B:/bbb;C:/ccc;
------------------------------------
你在遍历到最后一个附件的时候插入数据库的记录是正确的,推测你在循环内部作了插入,实际上只需要构造出路径串(A:/aaa;B:/bbb;C:/ccc;)在循环外部插入即可,可以看看你的数据库操作的代码
cpp2017 2007-01-05
  • 打赏
  • 举报
回复
就一句insert,我没贴出来,多附件上传地址 =fname.Text 放在循环外更新。 即在所有事件做完了。再更新数据库就可以了。
showlin 2007-01-05
  • 打赏
  • 举报
回复
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow df = upfiles.Rows[j];
dc.Add(df[0].ToString());
}

在循环内构造字串,循环外增加
WWWDJ1983 2007-01-05
  • 打赏
  • 举报
回复
就一句insert,我没贴出来,多附件上传地址 =fname.Text
mincunbao 2007-01-05
  • 打赏
  • 举报
回复
lizhizhe2000 2007-01-05
  • 打赏
  • 举报
回复
看不到你插入记录的语句
tt5201 2007-01-05
  • 打赏
  • 举报
回复
帮你顶

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧