Привязка SQLite на основе команд к источнику данных? - PullRequest
1 голос
/ 01 ноября 2009

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

  1. В связи с наличием VS 2008 Express поддержка времени разработки SQLite отсутствует. Я немного читал, и я довольно запутался в том, как использовать SQL-соединения на основе команд со стандартными элементами управления данными, то есть gridview. Если представления запрашивают источники данных, с каким источником данных я выберу использовать свои собственные операторы SQL? И как мне выбрать его, учитывая, что я не могу использовать поддержку времени разработки?

Спасибо,

Cameron

1 Ответ

1 голос
/ 02 ноября 2009

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

Global.asax:

public class Global : System.Web.HttpApplication
{
    public string GetDbFile()
    {
        return Path.Combine(Server.MapPath("~/App_Data"), "data.db3");
    }

    public string GetConnectionString()
    {
        return "Data Source=" + GetDbFile() + ";Version=3;";
    }

    protected void Application_Start(object sender, EventArgs e)
    {
        var dbFile = GetDbFile();
        if (File.Exists(dbFile))
        {
            File.Delete(dbFile);
        }
        ExecuteCommand("create table users (usr_id integer primary key, usr_name string)");
        ExecuteCommand("insert into users (usr_id, usr_name) values (1, 'user 1')");
        ExecuteCommand("insert into users (usr_id, usr_name) values (2, 'user 2')");
    }

    public void ExecuteCommand(string sql)
    {
        using (var connection = new SQLiteConnection(GetConnectionString()))
        using (var command = connection.CreateCommand())
        {
            connection.Open();
            command.CommandText = sql;
            command.ExecuteNonQuery();
        }
    }
}

Конечно, вы можете пропустить этот шаг, если у вас уже есть файл базы данных SQLite. Вам не нужно будет воссоздавать его каждый раз при запуске приложения :-)

Если у вас есть база данных, заполненная данными, вы можете отобразить ее в виде сетки.

default.aspx:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data.SQLite" %>

<script type="text/C#" runat="server">
    private class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            usersGrid.DataSource = GetUsers();
            usersGrid.DataBind();
        }
    }

    private IEnumerable<User> GetUsers()
    {
        using (var connection = new SQLiteConnection(ApplicationInstance.GetConnectionString()))
        using (var command = connection.CreateCommand())
        {
            connection.Open();
            command.CommandText = "select usr_id, usr_name from users";
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return new User { Id = reader.GetInt32(0), Name = reader.GetString(1) };
                }
            }
        }
    }
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="usersGrid" runat="server" />
    </div>
    </form>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...