C#自动注册sqlite ado.net数据库驱动 及 自定义连接字符串

vista或以上系统必须取得系统管理员权限执行以下代码。sqlite.net使用了1.0.66.0,支持ado.net EF数据模型,下载地址:http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/

部署时必须确保System.Data.SQLite.dll和System.Data.SQLite.Linq.dll都在项目的输入目录。即你的程序exe文件所在目录。

using System.Configuration;
using System.Xml.Linq;
using System.EnterpriseServices.Internal;

var d = ConfigurationManager.OpenMachineConfiguration().FilePath;
XElement xe = XElement.Load(d);
var dd = xe.Element("system.data").Element("DbProviderFactories").Elements("add");
if (dd.Where(md => md.Attribute("name").Value.Equals("SQLite Data Provider")).Count() == 0)
{
    Publish objPub = new Publish();
    objPub.GacRemove("System.Data.SQLite.dll");
    objPub.GacRemove("System.Data.SQLite.Linq.dll");
    objPub.GacInstall("System.Data.SQLite.dll");
    objPub.GacInstall("System.Data.SQLite.Linq.dll");

    xe.Element("system.data").Element("DbProviderFactories").Add(new XElement("add",
        new XAttribute("name", "SQLite Data Provider"), new XAttribute("invariant",
        "System.Data.SQLite"), new XAttribute("description", ".Net Framework Data Provider for SQLite"),
        new XAttribute("type", "System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139")
        ));
    xe.Save(d);
}

以下顺便提供一个自定义ado.net EF的自定义数据库连接方法:

public EntityConnection GetEntityConnection()
{
    EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder();
    ecsb.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", "Model1");
    ecsb.Provider = "System.Data.SQLite";
    ecsb.ProviderConnectionString = @"data source=data.db;Password=admin";
    EntityConnection ec = new EntityConnection(ecsb.ToString());
    return ec;
}

使用时:

dataEntities de = new dataEntities(GetEntityConnection());
dataGrid1.ItemsSource = de.userTable;

posted @ 2012-12-10 09:21  黎东海  阅读(622)  评论(0编辑  收藏  举报