VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1077|回复: 8

老问题了,请路过的帮忙看看

[复制链接]

2

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-10 14:00:01 | 显示全部楼层 |阅读模式
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;
请大哥大姐们帮忙看看
回复

使用道具 举报

0

主题

119

帖子

67.00

积分

新手上路

Rank: 1

积分
67.00
发表于 2020-6-2 10:00:02 | 显示全部楼层
看不到你插入记录的语句
回复

使用道具 举报

2

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-6-2 17:15:01 | 显示全部楼层
就一句insert,我没贴出来,多附件上传地址 =fname.Text
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-6-2 21:45:03 | 显示全部楼层
for (int j = 0; j < upfiles.Rows.Count; j++)
                {
                    DataRow df = upfiles.Rows[j];
                    dc.Add(df[0].ToString());
                }

在循环内构造字串,循环外增加
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-6-2 22:45:01 | 显示全部楼层
就一句insert,我没贴出来,多附件上传地址 =fname.Text


放在循环外更新。

即在所有事件做完了。再更新数据库就可以了。
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-6-3 14:30:07 | 显示全部楼层
比如说:我一次上传了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;)在循环外部插入即可,可以看看你的数据库操作的代码
回复

使用道具 举报

0

主题

21

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-6-3 18:00:01 | 显示全部楼层
使用stringbuilder.appendtext  每次都追加 filename就可以了

dr[0] = filename ,filename就应该是stringbuilder.tostring了
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-6-3 19:00:01 | 显示全部楼层
是啊,循环外操作数据库呗,前面加个判断,FOR外添加好了
回复

使用道具 举报

2

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-6-7 00:00:01 | 显示全部楼层
谢谢各位大哥啊,解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表