zoukankan      html  css  js  c++  java
  • C#实践: 基于.net linq技术 使用sqlite数据库

    (转载请注明来源:cnblogs coder-fang)

    背景:使用VS2013 .net4.5 开发sqlite数据库访问应用。

    1. 创建并设计sqlite测试数据库dbsqlite.db,填上一些测试数据 ,数据库关系如下:
    2. 使用vs2013创建类库DBTest,打开Nuget管理器控制台:输入:
      PM> install-package linq2db.SQLite -v 1.10.0

      注:因为2013的nuget版本只支持到linq2db的1.10.0,如果是vs2015及以上则不用使用-v参数。

    3. 此时DBtest中会自动加入一个文件,如图:
    4. 编辑此文件夹中的CopyMe.Sqlite.tt.txt,只更改LoadSQLiteMetadata函数,第一个参数为dbsqlite.db所在的目录:
    5. 将CopyMe.Sqlite.tt.txt文件名修改为dbSQLite.tt,此时会出现运行此模板的提示,点击确定。
    6.  模板运行后,会自动生成linqsqlite相关类:

    7. 修改DbsqliteDB的构造函数:
    8. 修改前: 修改后:
    9. 在DBTest工程下创建DBHelper类:

      using DataModels;
      using LinqToDB;
      using System;
      using System.Collections.Generic;
      using System.Data.SQLite;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace DBTest
      {
          public class DBHelper
          {
              static String connstr = @"Data Source=.dbsqlite.db;Version=3;";
              static DbsqliteDB db = new DbsqliteDB(connstr);
      
              public ITable<Depart> Departs { get { return db.Departs; } }
              public ITable<User> Users { get { return db.Users; } }
              
              public struct UserDTO
              {
                  public string name { get; set; }
                  public string depart { get; set; }
              }
              public List<UserDTO> GetUsers(string startWith)
              {
                  
                     // var names = from c in db.Users select new { c.Name };
                      var users = db.Users.Where(u=>u.Name.StartsWith(startWith)).Select(u=>new UserDTO(){name= u.Name, depart=u.Depart.Depart_Column });
      
                      return users.ToList() ;
                  
                  
              }
              public int SaveUser(User u)
              {                     
                      return db.Insert<User>(u);
                      
               
              }
      //用于为sqlite创建密码用的函数
              public void SetPassword(String pass)
              {
                  SQLiteConnection conn = new SQLiteConnection(@"Data Source=.dbsqlite.db;Version=3;");
                  conn.SetPassword(pass);
                  conn.Open();
              }
          }
      }
      View Code
    10. 创建DBUintTest单元测试工程,添加对DBTest的引用,修改UnitTest.cs,代码如下 :

      using System;
      using Microsoft.VisualStudio.TestTools.UnitTesting;
      using DBTest;
      using DataModels;
      
      namespace DBUnitTest
      {
          [TestClass]
          public class UnitTest
          {
              private DBHelper help;
              [TestMethod]
              public void TestGetNames()
              {
                  
                  var obj = help.GetUsers("z");
                  
                  obj.ForEach(u => { Console.WriteLine(u.name+"	"+u.depart); });
                  Assert.IsTrue(obj.Count > 0);
              }
      
              [TestMethod]
              public void TestSaveUser()
              {
                  User u = new User();
                  u.Name = "zhengqi";
                  u.Age = 23;
                  u.Sex = 'F';
      
                  u.Department = (int)help.Departs.Find(2).Id;
                  
                  Assert.IsTrue(help.SaveUser(u) > 0);
              }
      
              [TestInitialize]
              public void SetPassword()
              {
                  help = new DBHelper();
                  help.SetPassword("321");
                  
              }
          }
      }
      View Code
    11. 运行测试,通过:

    12. 所有使用sqlite数据库的相关工程都需要引用System.Data.SQLite Core                   

      

    完.

  • 相关阅读:
    Makefile使用函数
    Makefile条件判断
    Makefile使用变量
    Makefile书写命令
    Makefile书写规则
    Makefile总述
    Makefile基础知识
    LEETCODE刷题 替换空格
    LEETCODE刷题 二维数组查找
    【Intellij IDEA 奇淫技巧】自动生成serialVersionUID的设置
  • 原文地址:https://www.cnblogs.com/coder-fang/p/9364035.html
Copyright © 2011-2022 走看看