【发布时间】:2009-11-01 20:23:21
【问题描述】:
我正在尝试在我的应用程序中使用 SQLite,但遇到了麻烦。有几件事,首先。
- 由于拥有 VS 2008 Express,因此不存在 SQLite 设计时支持。我已经阅读了一些内容,但我对如何将基于命令的 sql 连接与标准数据控件(即 gridview)一起使用感到很困惑。如果视图要求提供数据源,我应该选择将自定义 SQL 语句用于什么数据源?鉴于我无法使用设计时支持,我该如何选择它?
谢谢,
卡梅隆
【问题讨论】:
我正在尝试在我的应用程序中使用 SQLite,但遇到了麻烦。有几件事,首先。
谢谢,
卡梅隆
【问题讨论】:
我从未在 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>
【讨论】: