none
一个上传文件代码的问题 RRS feed

  • 问题

  • using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;

    public partial class UploadFile : System.Web.UI.Page
    {
        string strUser;
        protected void Page_Load(object sender, EventArgs e)
        {
            strUser = Request.QueryString["username"];
        }
        protected void btnUpload_Click(object sender, EventArgs e)
        {
            string strFlieName;
            string strFileType;
            Random ran = new Random();
            //filename由时间加三位随机数组成
            string strFileISN = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 999);
            string strSq1;
            int iFileSize;
            if (FileUpload1.PostedFile.FileName != null)
            {
                //存在上传文件
                strFlieName = FileUpload1.PostedFile.FileName;
                strFileType = strFlieName.Substring(strFlieName.LastIndexOf(".") + 1);
                strFlieName = strFlieName.Substring(strFlieName.LastIndexOf("\\") + 1);
                iFileSize = FileUpload1.PostedFile.ContentLength;
                try
                {
                    #region 判断保存的文件是否存在
                    string strUpPath = @"uploadfiles\";

                    //文件夹不存在的时候,创建文件夹
                    if (!System.IO.Directory.Exists(Server.MapPath(strUpPath)))
                    {
                        System.IO.Directory.CreateDirectory(Server.MapPath(strUpPath));
                    }
                    string strUrl = Server.MapPath(strUpPath + @"\" + this.FileUpload1.FileName);
                    FileUpload1.SaveAs(strUrl);
                    lblResult.Text = "文件上传成功";
                    #endregion
                }
                catch
                {
                    lblResult.Text = "文件上传失败";
                }
                clsDB dob = new clsDB();
                strSq1 = "insert into userfile(fileisn,filename,filetype,filesize,creator)values('" + strFileISN + "','" + strFlieName + "','" + strFileType + "','" + iFileSize.ToString() + "','" + strUser + "')";
                dbo.ExecuteNoReturn(strSq1);
                dbo.killMe();
            }
            else
            {
                lblResult.Text = "请选择要上传的文件";
            }

        }
    }

    运行之后……

    编译错误

    说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 

    编译器错误消息: CS0246: 未能找到类型或命名空间名称“clsDB”(是否缺少 using 指令或程序集引用?)

    源错误:
    行 54:                 lblResult.Text = "文件上传失败";
    行 55:             }
    行 56:             clsDB dob = new clsDB();
    行 57:             strSq1 = "insert into userfile(fileisn,filename,filetype,filesize,creator)values('" + strFileISN + "','" + strFlieName + "','" + strFileType + "','" + iFileSize.ToString() + "','" + strUser + "')";
    行 58:             dbo.ExecuteNoReturn(strSq1);

    源文件: d:\Users\Joyce\Documents\thesisss\UploadFile.aspx.cs    行: 56 

        应该怎么改?
    2013年7月9日 12:39

答案

  • 如果有時間的話,我還是鼓勵你找出問題所在。

    這樣如果以後需要存到資料庫的時候(機會應該很大),就知道如何解決。

    如果是因為Exception造成的,有很多可能,例如是SQL語法錯誤(可以用 x2009again提到的,在SQL Server 執行看看)或者也有可能是你的connection有問題。

    總而言之,有時間就試著把問題找出來,因為以後可能會遇到一樣的問題。

    以上希望對你有幫助。

    2013年7月10日 13:57

全部回复

  • 給我的感覺是上傳檔案的部份是沒有問題的。

    問題是出在當你要實例你的ClsDB的部份的時候出了問題。

    問一下,你這個程式碼可以Build成功嗎?clsDB是你自己寫的嗎?因為錯誤訊息給我的感覺是它找不到這個類別,感覺比較像是Compile time的問題多過於執行是出錯的問題。

    2013年7月9日 12:55
  • 将clsDB组件加入参考,并using 引用命名空间

    2013年7月9日 12:58
  • 谢谢,忘了写clsDB.cs了

    现在能运行成功,上传文件后uploadfile文件夹中有刚上传的文件,但是文件信息并没有存入数据库中,怎么回事啊?

    2013年7月9日 14:29
  • 這就需要看你dbo.ExecuteNoReturn()這個裡面在做什麽,是否有真的執行SQL
    2013年7月9日 14:41
  • public string ExecuteNoReturn(string strSql)
        {
            string strReturn;
            SqlCommand myCommand = new SqlCommand(strSql, Connection);
            try 
            {
                if(Connection.State==ConnectionState.Closed)
                    Connection.Open();
                myCommand.ExecuteNonQuery();
                strReturn =  "成功";

            }
            catch
            {
                strReturn =   "失败";

            }
            myCommand.Dispose();
            Connection.Close();
            return strReturn;
        }

    这样对吗?我是新手

    2013年7月9日 15:22
  • 看起來是對的。

    不過需要確認的是在執行“ myCommand.ExecuteNonQuery();”的時候是否發生了Exception?

    換句話說 strReturn 是 “失敗”嗎?

    如果的確發生了Exception,那麼你就需要看那個Exception內容是什麽而去做處理。

    2013年7月9日 23:51
  • 决定不存到数据库里了,谢谢你为我回答这么多
    2013年7月10日 4:21
  • 可以把生成的sql语句复制到SQL Server执行试试,看能不能成功!
    2013年7月10日 5:53
  • 如果有時間的話,我還是鼓勵你找出問題所在。

    這樣如果以後需要存到資料庫的時候(機會應該很大),就知道如何解決。

    如果是因為Exception造成的,有很多可能,例如是SQL語法錯誤(可以用 x2009again提到的,在SQL Server 執行看看)或者也有可能是你的connection有問題。

    總而言之,有時間就試著把問題找出來,因為以後可能會遇到一樣的問題。

    以上希望對你有幫助。

    2013年7月10日 13:57