【问题标题】:Binding command-based SQLite to a data source?将基于命令的 SQLite 绑定到数据源?
【发布时间】:2009-11-01 20:23:21
【问题描述】:

我正在尝试在我的应用程序中使用 SQLite,但遇到了麻烦。有几件事,首先。

  1. 由于拥有 VS 2008 Express,因此不存在 SQLite 设计时支持。我已经阅读了一些内容,但我对如何将基于命令的 sql 连接与标准数据控件(即 gridview)一起使用感到很困惑。如果视图要求提供数据源,我应该选择将自定义 SQL 语句用于什么数据源?鉴于我无法使用设计时支持,我该如何选择它?

谢谢,

卡梅隆

【问题讨论】:

    标签: asp.net sqlite


    【解决方案1】:

    我从未在 Visual Studio 和 SQLite 中使用过设计支持,我想知道这是否可能,所以我建议您开始编码 :-) 这是一个说明基本思想的示例。您从创建数据库开始:

    全球.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>
    

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      相关资源
      最近更新 更多