2014-10-11 84 views
1

我在Visual Studio 2010中工作,我试图通过网页将文档上载到访问数据库。当我运行我的代码时,我没有收到任何错误,但没有写入数据库。这是我的点击代码,以显示我认为它应该做的事情。使用c#将文档上传到Access数据库

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     if (FileUpload1.HasFile) 
     { 
      string fileExtension = Path.GetExtension(FileUpload1.FileName); 

      if (fileExtension.ToLower() != ".doc" || fileExtension.ToLower() != ".docx" || fileExtension.ToLower() != ".pdf") 
      { 
       lblInfo.Text = "Only .doc, .docx, or .pdf files are allowed."; 
       lblInfo.ForeColor = System.Drawing.Color.Red; 
      } 
      else 
      { 
       int fileSize = FileUpload1.PostedFile.ContentLength; 
       if (fileSize > 2097152) 
       { 
        lblInfo.Text = "Maximum file size of 2 MB exceeded."; 
        lblInfo.ForeColor = System.Drawing.Color.Red; 
       } 
       else 
       { 
        OleDbCommand update = new OleDbCommand("Update STAFF SET Resume = @Resume WHERE [email protected]", DBConnection); 
        update.Parameters.Add("@Resume", OleDbType.LongVarBinary).Value = FileUpload1.FileContent; 
        update.Parameters.Add("@StaffID", OleDbType.Integer).Value = txtStaffID.Text; 
        lblInfo.Text = "File Uploaded"; 
        lblInfo.ForeColor = System.Drawing.Color.Green; 
       } 
      } 
     } 
     else 
     { 
      lblInfo.Text = "Please select a file to upload"; 
      lblInfo.ForeColor = System.Drawing.Color.Red; 
     } 

    } 

如果您可以提供任何意见或建议,将是伟大的。谢谢。我还会显示整个代码,以防万一它是数据库连接的问题。

public partial class Staff : System.Web.UI.Page 
{ 
    OleDbConnection DBConnection = new OleDbConnection(); 
    OleDbDataAdapter DataAdapter; 
    DataTable LocalDataTable = new DataTable(); 

    private void ConnectToDatabase() 
    { 
     DBConnection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\CIS470_TPS_System\CIS470_TPS_System\CIS470_TPS_System\App_Data\TpsSystem_DB.mdb"; 
     DBConnection.Open(); 
     DataAdapter = new OleDbDataAdapter("Select * From STAFF", DBConnection); 
     DataAdapter.Fill(LocalDataTable); 
    } 

    private void Page_Load(object sender, EventArgs e) 
    { 
     ConnectToDatabase(); 
    } 

    protected void AccessDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
    { 

    } 

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string requestId = GridView1.SelectedRow.Cells[1].Text; 
     txtSelectedStaff.Text = requestId; //this control holds the selected value 
    } 

    protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e) 
    { 

    } 
+0

此次荣获” t工作,因为你刚刚使用OleDbCommand,但没有执行它。尝试在“lblInfo.Text =”File Uploaded“;”之前使用update.ExecuteNonQuery()行,然后检查。 ;) – 2014-10-11 06:02:01

+0

@HiteshMistry感谢您的建议,但之后,我按下上传时出现错误。它说InvalidCastException由用户代码处理。无法将参数值从HttpInputStream转换为字节[]。 – 2014-10-11 06:29:41

+0

嘿道格拉斯,只需写FileUpload1.FileBytes而不是FileUpload1.FileContent,试着让我知道它是否解决了这个问题。我无法做到这一点,因为我没有安装在我的机器上。 :| – 2014-10-11 09:18:57

回答

0

正如评论的问题的建议,我们可以使用FileUpload控件的.FileBytes财产提供查询参数的值,如本(简体)例如:

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
    using (var con = new OleDbConnection()) 
    { 
     con.ConnectionString = 
       @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
       @"Data Source=C:\__tmp\staffDb.accdb;"; 
     con.Open(); 
     using (var cmd = new OleDbCommand()) 
     { 
      cmd.Connection = con; 
      cmd.CommandText = 
        "UPDATE STAFF SET Resume=? " + 
        "WHERE StaffID=?"; 
      cmd.Parameters.AddWithValue("?", FileUpload1.FileBytes); 
      cmd.Parameters.AddWithValue("?", 1); 
      cmd.ExecuteNonQuery(); 
     } 
     con.Close(); 
    } 
} 
相关问题