Я написал некоторый базовый код в ASP.NET, который обращается к базе данных Microsoft Access, которая работает, когда я работаю в режиме отладки на IIS Express, но когда я опубликовал приложение и попытался запустить его на реальном веб-сайте, я получилошибка.
[IndexOutOfRangeException: в позиции 0 нет строки.]
System.Data.RBTree`1.GetNodeByIndex (Int32 userIndex) + 2430497
NIM_Tool.Default.Page_Load (Отправитель объекта, EventArgs e) + 2321
System.Web.UI.Control.OnLoad (EventArgs e) + 106
System.Web.UI.Control.LoadRecursive () + 68
System.Web.что база данных не может быть найдена, но я не могу понять, почему к ней можно получить доступ в режиме отладки / выпуска, но не в опубликованном режиме.После нажатия кнопки «Опубликовать» все файлы были перемещены в папку bin / Release / Publish / из корневого каталога, после чего я скопировал все дочерние элементы папки «Опубликовать» на правильный путь к серверу.В дочерних файлах / папках также содержалась правильная база данных MS Access.
код из файла DataLayer.cs
public class DataLayer {
static OleDbConnection conn;
static OleDbCommand cmd;
static String connString;
static OleDbDataAdapter adp;
private static void CreateCommand()
{
// have also tried hardcoding this to the production server path but this failed too
connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("MyDatabase.mdb") + ";Persist Security Info=False;"
conn = new OleDbConnection(connString);
cmd = new OleDbCommand();
cmd.Connection = conn;
adp = new OleDbDataAdapter();
}
public static DataTable GetDefaultDeposit()
{
DataTable dt = new DataTable();
CreateCommand();
try {
cmd.CommandText = "SELECT * FROM Table1";
adp.SelectCommand = cmd;
adp.Fill(dt);
}
catch (Exception ex) {
}
return dt;
}
}
и код Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dtDeposit = DataLayer.GetDefaultDeposit();
string fixedCost = (string)dtDeposit.Rows[0]["FixedCost"];
}
}
Файл MyDatabase.mdb находится в том же каталоге, что и файл DataLayer.cs.Я также попытался жестко запрограммировать путь к базе данных, где он должен быть доступен на сервере, но также получил то же сообщение об ошибке.