Загрузить документы в базу данных Access с помощью c #

1

Я работаю в Visual Studio 2010, и я пытаюсь загрузить документы через веб-страницу в базу данных доступа. Я не получаю никаких ошибок при запуске моего кода, но ничего не записывает в базу данных. Вот мой код на клике, чтобы показать, что я думаю, что он должен делать.

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 StaffID=@StaffID", 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;
        }

    }

Если бы вы могли предоставить какие-либо советы или предложения, которые были бы замечательными. Благодарю. Я также покажу весь код, на всякий случай, если это проблема с соединением DB.

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
    Это не будет работать, так как вы только что использовали OleDbCommand, но не выполнили его. Попробуйте выполнить с помощью update.ExecuteNonQuery () перед "lblInfo.Text =" File Uploaded ";" линия, а затем проверьте. ;)
  • 0
    @HiteshMistry Спасибо за предложение, но после этого я получаю ошибку при нажатии кнопки загрузки. Это говорит, что InvalidCastException был обработан пользовательским кодом. Не удалось преобразовать значение параметра из HttpInputStream в Byte [].
Показать ещё 3 комментария
Теги:
file-upload
ms-access-2010

1 ответ

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();
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню