none
从新提问--固定4个附件采用多附件上传方法写入数据库 RRS feed

  • 问题

  • 数据库 字段id, fujian1,fujian2,fujian3,fujian4 四个字段
    页面附件
    <asp:FileUpload ID="File1" runat="server" Width="290px" />
    <asp:FileUpload ID="File2" runat="server" Width="290px" />
    <asp:FileUpload ID="File3" runat="server" Width="290px" />
    <asp:FileUpload ID="File4" runat="server" Width="290px" />

    后台cs也代码
     HttpFileCollection Files = HttpContext.Current.Request.Files;
            for (int i = 0; i < Files.Count; i++)
            {
                HttpPostedFile PostedFile = Files[i];
                if (PostedFile.ContentLength > 0)
                {
                    string FileName = PostedFile.FileName;
                    string strExPrentFile = FileName.Substring(FileName.LastIndexOf(".") + 1);
                    string[] AgreeExPrentFile = new string[] { "doc", "jpg", "txt", "rar" };
                    bool IsUp = false;
                    for (int j = 0; j < AgreeExPrentFile.Length; j++)
                    {
                        if (strExPrentFile.Equals(AgreeExPrentFile[j]))
                        {
                            IsUp = true;
                        }
                    }
                    if (IsUp)
                    {
                        fn=DateTime.Now.ToString("yyMMddhhmmss")+Strings.GetRandom(5)+"."+strExPrentFile;
                        
                       
                    }
                }
                string strSql="insert into table(fujian1,fujian2,fujian3,fujian4) values(.....)"
            }
            
        }
    Strings.GetRandom(5) 是一个获得随机数的方法。


    现在需求是,用户上传附件不是必须4个附件都必须上传,有可能选择附件1,附件2,附件4 或者其他组合。总之上传附件文件和对应数据库字段对应,如果附件4有值要写到数据库fujian4里,而不是fujian3  。现在我无法获得附件是那个控件来的。不知道我这个需求怎么解决
    不用羡慕----那,只是个传说!
    2009年4月18日 5:37

答案

  • HTML
    
    <asp:FileUpload ID="File1" runat="server" Width="290px" />
    <asp:FileUpload ID="File2" runat="server" Width="290px" />
    <asp:FileUpload ID="File3" runat="server" Width="290px" />
    <asp:FileUpload ID="File4" runat="server" Width="290px" />
    
    CS
    
    protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            HttpFileCollection fFiles = HttpContext.Current.Request.Files;
            Dictionary<string, string> fColumns = new Dictionary<string,string>();
    
            foreach (string fKey in fFiles.AllKeys)
            {
                // 这里仅文件名为例构造出 SQL 语句并不保存到数据库中
                string fValue = fFiles[fKey].FileName;
    
                if (!String.IsNullOrEmpty(fValue))
                {
                    if (fKey == "File1")
                        fColumns.Add("fujian1", fValue);
                    else if (fKey == "File2")
                        fColumns.Add("fujian2", fValue);
                    else if (fKey == "File3")
                        fColumns.Add("fujian3", fValue);
                    else if (fKey == "File4")
                        fColumns.Add("fujian4", fValue);
                }
            }
    
            if (fColumns.Count != 0)
            {
                StringBuilder fColumnBuilder = new StringBuilder();
                StringBuilder fValueBuilder = new StringBuilder();
    
                foreach (KeyValuePair<string, string> fPair in fColumns)
                {
                    if (fColumnBuilder.Length !=0)
                        fColumnBuilder.Append(", ");
                    fColumnBuilder.Append(fPair.Key);
    
                    if (fValueBuilder.Length != 0)
                        fValueBuilder.Append(", ");
                    fValueBuilder.Append(string.Format("'{0}'", fPair.Value));
                }
    
                string fCommandText = string.Format("insert into ({0}) values ({1})", fColumnBuilder.ToString(), fValueBuilder.ToString());
                Response.Write(fCommandText);
            }
        }


    知识改变命运,奋斗成就人生!
    2009年4月18日 10:11
    版主
  • 强求按照顺序来上传没有任何意义,客户端的文件名、点浏览的顺序你都不能控制,你控制这些1,2,3也就没有任何意义了。就是说,你即使控制了,也不会是正确的,按照这个约定来实现业务,会导致错误


    孟宪会
    2009年4月18日 23:41
    版主

全部回复

  • HTML
    
    <asp:FileUpload ID="File1" runat="server" Width="290px" />
    <asp:FileUpload ID="File2" runat="server" Width="290px" />
    <asp:FileUpload ID="File3" runat="server" Width="290px" />
    <asp:FileUpload ID="File4" runat="server" Width="290px" />
    
    CS
    
    protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            HttpFileCollection fFiles = HttpContext.Current.Request.Files;
            Dictionary<string, string> fColumns = new Dictionary<string,string>();
    
            foreach (string fKey in fFiles.AllKeys)
            {
                // 这里仅文件名为例构造出 SQL 语句并不保存到数据库中
                string fValue = fFiles[fKey].FileName;
    
                if (!String.IsNullOrEmpty(fValue))
                {
                    if (fKey == "File1")
                        fColumns.Add("fujian1", fValue);
                    else if (fKey == "File2")
                        fColumns.Add("fujian2", fValue);
                    else if (fKey == "File3")
                        fColumns.Add("fujian3", fValue);
                    else if (fKey == "File4")
                        fColumns.Add("fujian4", fValue);
                }
            }
    
            if (fColumns.Count != 0)
            {
                StringBuilder fColumnBuilder = new StringBuilder();
                StringBuilder fValueBuilder = new StringBuilder();
    
                foreach (KeyValuePair<string, string> fPair in fColumns)
                {
                    if (fColumnBuilder.Length !=0)
                        fColumnBuilder.Append(", ");
                    fColumnBuilder.Append(fPair.Key);
    
                    if (fValueBuilder.Length != 0)
                        fValueBuilder.Append(", ");
                    fValueBuilder.Append(string.Format("'{0}'", fPair.Value));
                }
    
                string fCommandText = string.Format("insert into ({0}) values ({1})", fColumnBuilder.ToString(), fValueBuilder.ToString());
                Response.Write(fCommandText);
            }
        }


    知识改变命运,奋斗成就人生!
    2009年4月18日 10:11
    版主
  • 有点乱。 X.X.Y 你写的这个如果上传附件的值为空 对应数据库字段是为空吗。。不用定义 四个空字符串吗?


    不用羡慕----那,只是个传说!
    2009年4月18日 10:59
  • 不用
    如果有1,3附件
    会生成 insert into table1 (fujan1, fujan3) values ('附件1', '附件2')

    知识改变命运,奋斗成就人生!
    2009年4月18日 11:05
    版主
  • 你的意思是说 string fCommandText = string.Format("insert into ({0}) values ({1})", fColumnBuilder.ToString(), fValueBuilder.ToString());
    这个语句我不用在添加什么啦。就可以啦

    不用羡慕----那,只是个传说!
    2009年4月18日 11:14
  • 应该是这样的,少打了个表名修正一下
    string fCommandText = string.Format("insert into table ({0}) values ({1})", fColumnBuilder.ToString(), fValueBuilder.ToString());

    知识改变命运,奋斗成就人生!
    2009年4月18日 13:25
    版主
  • 强求按照顺序来上传没有任何意义,客户端的文件名、点浏览的顺序你都不能控制,你控制这些1,2,3也就没有任何意义了。就是说,你即使控制了,也不会是正确的,按照这个约定来实现业务,会导致错误


    孟宪会
    2009年4月18日 23:41
    版主