Лучшая практика для SQLite с WPF и ASP.NET MVC? - PullRequest
3 голосов
/ 22 января 2009

Как правильно работать с SQLite в WPF и ASP.NET MVC?

  • В WPF у меня есть файл test.sqlite в каталоге с именем App_Data, но когда я компилирую и запускаю его, он не копирует базу данных в ../bin/Debug, поэтому, конечно, он не может Найди это. Но если я вручную скопирую файл test.sqlite в ../bin/Debug, он будет работать. Но это не может быть то, как можно разработать приложение, имеющее локальную базу данных, в которую оно читает и пишет, верно? Как можно пометить базу данных как «часть приложения», чтобы при ее компиляции и запуске она копировалась и могла использоваться? Или это часть процесса разработки / публикации? Что мне здесь не хватает, я думаю, что у меня есть здесь веб-метафора, которая просто не работает с приложением Windows, которое делает что-то.

  • В ASP.MVC я скопировал тот же код, который обращается к базе данных в WPF, но он продолжает говорить, что «не может открыть базу данных» в строке connection.Open (). У меня есть "../App_Data/test.sqlite", который, как я понимаю, является подходящим местом для доступа к файлам. Однако я попытался записать текстовый файл в "../App_data" и получил исключение UnauthorizedAccessException ", поэтому я предполагаю, что проблема заключается в том, что у меня нет права на чтение / запись здесь. Как я могу это изменить?

        private string getData()
    {
        StringBuilder sb = new StringBuilder();
        //string fullPathAndFileName = Server.MapPath("App_Data/testnew.sqlite");
        using (SQLiteConnection conn = 
              new SQLiteConnection(@"Data Source=" + Server.MapPath("App_Data/testnew.sqlite")))
        {
            StringBuilder query = new StringBuilder();
            query.Append("SELECT * ");
            query.Append("FROM members ");
            query.Append("ORDER BY firstName");
            using (SQLiteCommand cmd = new SQLiteCommand(query.ToString(), conn))
            {
                conn.Open();
                using (SQLiteDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //Console.WriteLine(dr.GetValue(0) + " " + dr.GetValue(1));  
                        string id = dr.GetValue(0).ToString();
                        string firstName = dr.GetValue(1).ToString();
                        sb.Append(firstName + ", ");
    
                    }
                }
            }
        }
        return sb.ToString();
    
    }
    

1 Ответ

4 голосов
/ 22 января 2009

Вы можете добавить файл test.sqlite в ваш проект WPF и в окне свойств указать «Копировать в выходной каталог»: «Копировать всегда». Таким образом, каждый раз, когда вы компилируете свой проект, файл будет автоматически копироваться в выходной каталог.

Что касается исключения UnauthorizedAccessException, пытались ли вы предоставить разрешения на чтение и запись для папки App_Data учетной записи службы ASP.Net? Чтобы узнать учетную запись, используемую для запуска пула приложений, вы можете написать простую страницу test.aspx:

<%@ Page Language="C#" %>
<script runat="server">
  protected override void OnLoad(EventArgs e)
  {
      Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
      base.OnLoad(e);
  }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...