sachees123 Ответов: 2

Как запустить доступ из WS 2012 и IIS 8 с помощью ASP.NET


После долгого дня борьбы с сервером я могу запускать свои страницы. aspx через server 2012 на клиентских машинах.

Теперь новая проблема, моя страница не отвечает на базу данных MS ACCESS, сохраненную на сервере.

Никакая ошибка ... и страница не отвечает на событие выпадающим списком.

Он отлично работает на машине разработчика...

Кто-нибудь, пожалуйста, помогите.

Спасибо

Что я уже пробовал:

I did make it compatible with 32bit, but all in vain.

вот код
query = "select DISTINCT PLAN from FEE where course='" + ddlProgram.DataValueField + "' and acd_session='2017_18'";

        using (OleDbConnection connection = new OleDbConnection(cnstr))
        {
            OleDbCommand command = new OleDbCommand(query, connection);
            connection.Open();
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                ddlCoursePlan.Items.Add(reader.GetValue(0).ToString());
            }
        }


Теперь на изменение в выпадении нет никакого действия.

В то время как на момент разработки все работает нормально.

Richard MacCutchan

Пожалуйста, предоставьте соответствующие сведения. Никто здесь не может догадаться, что делает ваш код.

2 Ответов

Рейтинг:
2

#realJSOP

Вы можете использовать базу данных access, но не "запускать" само приложение. Вот статический класс, который я использую для получения/размещения данных в базе данных Access. Если это не то, что вам нужно, вам придется улучшить свой вопрос.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;

namespace BODCommon
{
    /// <summary>
    /// 
    /// </summary>
    public static class AccessDBObject
    {
        /// <summary>
        /// Gets or sets the connection string.
        /// </summary>
        public static string ConnectionString { get; set; }

        /// <summary>
        /// Initializes the <see cref="AccessDBObject"/> class.
        /// </summary>
        static AccessDBObject()
        {
        }

        /// <summary>
        /// Gets the data using a plain query string.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <returns></returns>
        public static DataTable GetData(string query)
        {
            DataTable result = new DataTable();
            try
            {
                OleDbConnection conn = null;
                OleDbDataAdapter cmd = null;
                using (conn = new OleDbConnection(AccessDBObject.ConnectionString))
                {
                    conn.Open();
                    using (cmd = new OleDbDataAdapter(query, conn))
                    {
                        cmd.Fill(result);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex != null) {}
            }
            return result;
        }

        /// <summary>
        /// Gets the data using a list of parameters (as opposed to a plain query string)
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public static DataTable GetData(string query, List<OleDbParameter> parameters)
        {
            DataTable result = new DataTable();
            try
            {
                OleDbConnection conn   = null;
                OleDbCommand    cmd    = null;
                OleDbDataReader reader = null;
                using (conn = new OleDbConnection(AccessDBObject.ConnectionString))
                {
                    conn.Open();
                    using (cmd = new OleDbCommand(query, conn))
                    {
                        if (parameters != null)
                        {
                            foreach(OleDbParameter param in parameters)
                            {
                                cmd.Parameters.Add(param);
                            }
                        }
                        reader = cmd.ExecuteReader();
                        result.Load(reader);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex != null) {}
            }
            return result;
        }

        /// <summary>
        /// Sets the data.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns></returns>
        public static int SetData(string query, List<OleDbParameter> parameters = null)
        {
            int recordsAffected = 0;
            try
            {
                OleDbConnection conn = null;
                OleDbCommand cmd = null;
                using (conn = new OleDbConnection(AccessDBObject.ConnectionString))
                {
                    conn.Open();
                    using (cmd = new OleDbCommand(query, conn))
                    {
                        if (parameters != null)
                        {
                            foreach(OleDbParameter param in parameters)
                            {
                                cmd.Parameters.Add(param);
                            }
                        }
                        recordsAffected = cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex != null) {}
            }
            return recordsAffected;
        }
    }
}


Рейтинг:
2

sachees123

добавьте базу данных в сам проект, и это действительно решило мою проблему.

но меня это не устраивает...

Нужно иметь возможность доступа к базе данных из любой папки на сервере.

Ответьте, если вы согласны со мной.


Dave Kreskowiak

Если бы вы не добавили базу данных в проект, она не была бы развернута, если бы вы использовали функцию публикации в Visual Studio. Ваша база данных не была бы скопирована на сервер. На сервере нет базы данных, и ваш код терпит неудачу.

Теперь, имея возможность использовать базу данных из "любой папки" в вашем ASP.NET приложение зависит от используемой вами строки подключения и от того, указывает ли она на правильное расположение файла доступа. Если он использует относительный путь, он может работать или не работать правильно в ASP.NET приложение.

Если вы хотите попасть в базу данных "из любого места", вам действительно нужно использовать реальный движок базы данных, такой как SQL Server. Access является файл базы данных настольного компьютера, не предназначены для работы сервера.