我上传的文件,可以上传到服务器,可怎么存不了数据库呢?
老是说file附近有错.帮我看看哦.   
protected void okBtn_Click(object sender, EventArgs e)
    {
        string file_path = FileUpload1.PostedFile.FileName.ToLower();
        string filename= ""; // 上传文件的文件名(原名)
        int size = FileUpload1.PostedFile.ContentLength;//上传文件的大小
        // 从web.config文件中读取文件上传的路径;
        string root = System.Configuration.ConfigurationSettings.AppSettings["upload"];
        if (file_path.Equals(""))
        {
            Response.Write("<script>alert('请选择文件!')</script>");
            return;
        }        if (size == 0)
        {
            Response.Write("<script>alert('找不到文件!')</script>");
            return;
        }
        // 对文件名进行处理,使该文件名是唯一的,这里的做法是加入文件上传的时间;
        int position = file_path.LastIndexOf("\\");
        string uptime = DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
        filename = file_path.Substring(position + 1);    
        string uploadfile = uptime + filename;
        // 判断upload目录是否存在,如果不存在就创建该目录;
        if (!Directory.Exists(root))
        {
            Directory.CreateDirectory(root);
        }
        
        // 指明上传的路径
        string destination = root + uptime + filename;
        // 在服务器保存文件;
            FileUpload1.PostedFile.SaveAs(destination);
            SqlConnection meteor = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["meteor"]);
            meteor.Open();
            SqlCommand cmd = new SqlCommand("insert into file(uploadfile,filename) values ('" + uploadfile + "','" + filename + "')", meteor);
            cmd.ExecuteNonQuery();
            meteor.Close();
             Response.Write("<script>alert('上传成功!')</script>");  
    }

解决方案 »

  1.   

    从你的代码来看, 跟你上传文件没关系, 问题出在数据库的插入上了. 先检查下sql语句.
      

  2.   

    跟踪程序,把("insert into file(uploadfile,filename) values ('" + uploadfile + "','" + filename + "')"这句的结果打出来看看就知道哪里错了,应该是SQL语句错误
      

  3.   

    跟踪程序,把("insert into file(uploadfile,filename) values ('" + uploadfile + "','" + filename + "')"这句的结果打出来看看就知道哪里错了,应该是SQL语句错误
      

  4.   

    跟踪程序,把("insert into file(uploadfile,filename) values ('" + uploadfile + "','" + filename + "')"这句的结果打出来看看就知道哪里错了,应该是SQL语句错误
      

  5.   

    怎么把那个,sql语句的结果打出来啊 ?
      

  6.   

    上传到数据库的时候把你上传的文件转换成二进制的,数据库相应存储文件的字段应该设置为image或者二进制类型。楼主可以看一下我的代码:是将图片上传的,你稍微修改一下就好:    Private Function ConvertToByte(ByVal filePath As FileUpload) As Byte()
            If filePath.HasFile Then
                Dim Buffer As Byte() = New Byte(filePath.PostedFile.ContentLength) {}
                Dim Sr As FileStream = New FileStream(filePath.PostedFile.FileName, FileMode.Open, FileAccess.Read)
                Try
                    Sr.Read(Buffer, 0, filePath.PostedFile.ContentLength)
                    Sr.Close()
                Catch ex As Exception            End Try
                Return Buffer
            End If    End Function    'Add new picture
        Protected Sub dvAdv_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvAdv.ItemInserting
            Dim StoreID As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(0).Cells(1).Controls(1), DropDownList).SelectedValue.ToString().Trim())
            Dim AdvType As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(1).Cells(1).Controls(1), DropDownList).SelectedValue.Trim().ToString())
            Dim Name As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(2).Cells(1).Controls(1), TextBox).Text.Trim().ToString())
            Dim Image As FileUpload = CType(Me.dvAdv.Rows(4).Cells(1).Controls(1), FileUpload)
            'Dim ImageType As String = CType(Me.dvAdv.Rows(5).Cells(1).Controls(1), DropDownList).SelectedValue
            Dim HyperLink As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(5).Cells(1).Controls(0), TextBox).Text.ToString().Trim())
            'Dim Map As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(6).Cells(1).Controls(0), TextBox).Text.ToString().Trim())
            Dim AlternateText As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(3).Cells(1).Controls(1), TextBox).Text.Trim())
            Dim Seq As Integer
            If IsNotEmpty(Server.HtmlEncode(CType(Me.dvAdv.Rows(7).Cells(1).Controls(1), TextBox).Text.Trim())) Then
                Seq = CType(Server.HtmlEncode(CType(Me.dvAdv.Rows(7).Cells(1).Controls(1), TextBox).Text.Trim()), Integer)
            Else
                Seq = Nothing
            End If        Dim StartDate As DateTime = Server.HtmlEncode(CType(Me.dvAdv.Rows(8).Cells(1).Controls(1), HtmlInputText).Value.Trim())
            Dim EndDate As DateTime = Server.HtmlEncode(CType(Me.dvAdv.Rows(9).Cells(1).Controls(1), HtmlInputText).Value.Trim())
            'Dim UpdateBy As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(11).Cells(1).Controls(1), TextBox).Text.Trim())
            Dim Publish As String = Server.HtmlEncode(CType(Me.dvAdv.Rows(10).Cells(1).Controls(1), DropDownList).SelectedValue)        Dim InsertSql As String = "INSERT INTO tbBannerAdv" & _
                                        " VALUES(@StoreID,@AdvType,@Name,@Image,@Dimension,@ImageType,@HyperLink,null,@AlternateText,@Seq,@StartDate,@EndDate,@UpdateBy,getdate(),@Publish,default,default)"
            Dim Content As Byte()
            If Image.HasFile Then
                Dim Extension = IsAllowedExtension(Image)
                If Extension <> "N/A" Then
                    Dim Dimension As String = IIf(Extension <> "application/x-shockwave-flash", GetPixel(Image), "")
                    Using Con As SqlConnection = New SqlConnection(ConStr)
                        Using Cmd As SqlCommand = New SqlCommand(InsertSql, Con)
                            Try
                                Cmd.Parameters.AddWithValue("@StoreID", StoreID)
                                Cmd.Parameters.AddWithValue("@AdvType", AdvType)
                                Cmd.Parameters.AddWithValue("@Name", Name)
                                Content = ConvertToByte(Image)
                                Cmd.Parameters.AddWithValue("@Image", Content)
                                Cmd.Parameters.AddWithValue("@Dimension", Dimension)
                                Cmd.Parameters.AddWithValue("@ImageType", Extension)
                                Cmd.Parameters.AddWithValue("@HyperLink", HyperLink)
                                'Cmd.Parameters.AddWithValue("@Map", Map)
                                Cmd.Parameters.AddWithValue("@AlternateText", AlternateText)
                                Cmd.Parameters.AddWithValue("@Seq", Seq)
                                Cmd.Parameters.AddWithValue("@StartDate", StartDate)
                                Cmd.Parameters.AddWithValue("@EndDate", EndDate)
                                Cmd.Parameters.AddWithValue("@UpdateBy", Session("eStoreAdmin").AdminEmail())
                                Cmd.Parameters.AddWithValue("@Publish", Publish)                            Con.Open()
                                Cmd.ExecuteNonQuery()
                                BindGrid()
                                Me.mvView.ActiveViewIndex = 0
                            Catch ex As Exception
                                ShowMessage("Add failed,please try again!")
                            End Try
                        End Using
                    End Using
                Else
                    ShowMessage("Incorrect format,please try again!")
                End If        End If
        End Sub
        'verify extension
        Public Shared Function IsAllowedExtension(ByVal Files As FileUpload) As String
            If Files.HasFile Then
                Dim FileTypesAllow() As String = {"application/x-shockwave-flash", "image/jpeg", "image/gif", "image/png"}
                If Array.IndexOf(FileTypesAllow, Files.PostedFile.ContentType) >= 0 Then
                    Return Files.PostedFile.ContentType
                Else
                    Return "N/A"
                End If
      

  7.   

    拉掉了一点代码,重发一下:    'verify extension
        Public Shared Function IsAllowedExtension(ByVal Files As FileUpload) As String
            If Files.HasFile Then
                Dim FileTypesAllow() As String = {"application/x-shockwave-flash", "image/jpeg", "image/gif", "image/png"}
                If Array.IndexOf(FileTypesAllow, Files.PostedFile.ContentType) >= 0 Then
                    Return Files.PostedFile.ContentType
                Else
                    Return "N/A"
                End If
            Else
                Return "N/A"
            End If    End Function
      

  8.   

    建议你使用存储过程来完成,事例代码如下:
            string lsField, lsValue;
            System.Data.SqlClient.SqlConnection SqlConn = new System.Data.SqlClient.SqlConnection(ConnectionString);
            SqlConn.Open();
            System.Data.SqlClient.SqlTransaction SqlTran = SqlConn.BeginTransaction();
            System.Data.SqlClient.SqlCommand SqlComm = new System.Data.SqlClient.SqlCommand();
            try
            {
                SqlComm.Connection = SqlConn;
                SqlComm.Transaction = SqlTran;
                //以下是保存文件部分
                System.Web.HttpFileCollection Files = System.Web.HttpContext.Current.Request.Files;
                string Filename;
                string FilePostfix;
                string FileSize;
                string FileGenre;
                System.IO.Stream FileStream;
                for (int i = 0; i < Files.Count; i++)
                {
                    System.Web.HttpPostedFile PostedFile = Files[i];
                    Filename = System.IO.Path.GetFileName(PostedFile.FileName).ToString().Trim();
                    if (Filename.Length > 0)
                    {
                        FilePostfix = System.IO.Path.GetExtension(Filename);
                        Filename = Filename.Substring(0, Filename.Length - FilePostfix.Length);
                        FileGenre = PostedFile.ContentType.ToString().Trim();
                        FileSize = PostedFile.ContentLength.ToString().Trim();
                        lsField = "NodeId, Filename, Filematter, Postfix, Filesize";
                        lsValue = StringUtil.String(dtNow.AddSeconds(i).ToString("yyyyMMddhhmmss"));
                        lsValue += StringUtil.String(Filename) + ", ";
                        lsValue += "@Content, ";
                        lsValue += StringUtil.String(FilePostfix) + ", ";
                        lsValue += StringUtil.Integer(FileSize) + "";
                        FileStream = PostedFile.InputStream;
                        byte[] File = new byte[PostedFile.ContentLength];
                        FileStream.Read(File, 0, PostedFile.ContentLength);                    SqlComm.Parameters.Clear();
                        SqlComm.CommandText = "INSERT INTO Crit_" + TabName + "_FILE (" + lsField + ") VALUES (" + lsValue + ")";
                        SqlComm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Content", SqlDbType.Image)).Value = File;
                        SqlComm.ExecuteNonQuery();
                    }
                }
                SqlTran.Commit();
                return true;
            }
            catch (Exception ex)
            {
                SqlTran.Rollback();
                ex.ToString();
                return false;
            }
      

  9.   

    看不出楼主写的INSERT语句有什么问题,可以把写入数据库的语句分离:SqlConnection meteor = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["meteor"]); 
    meteor.Open(); 
    String InsertCmd="insert into file(uploadfile,filename) values ('" + uploadfile + "','" + filename + "')";
    SqlCommand cmd = new SqlCommand(InsertCmd, meteor); 
    cmd.ExecuteNonQuery(); 
    meteor.Close(); 然后搞个TextBox来显示InsertCmd语句参数转换后的结果:
    txt_test1=InsertCmd.toString()把这个结果直接到查询分析器里执行一下,排除SQL语句的问题