Hi.Ltd.SqlServer 2025.4.21.1155

dotnet add package Hi.Ltd.SqlServer --version 2025.4.21.1155
                    
NuGet\Install-Package Hi.Ltd.SqlServer -Version 2025.4.21.1155
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Hi.Ltd.SqlServer" Version="2025.4.21.1155" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Hi.Ltd.SqlServer" Version="2025.4.21.1155" />
                    
Directory.Packages.props
<PackageReference Include="Hi.Ltd.SqlServer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Hi.Ltd.SqlServer --version 2025.4.21.1155
                    
#r "nuget: Hi.Ltd.SqlServer, 2025.4.21.1155"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Hi.Ltd.SqlServer&version=2025.4.21.1155
                    
Install as a Cake Addin
#tool nuget:?package=Hi.Ltd.SqlServer&version=2025.4.21.1155
                    
Install as a Cake Tool

Hi.Ltd.SqlServer

此类主要与 SQL SERVER数据库进行增删改查方法实现

以下是在C# 中创建表时用到的属性对应到数据库中数据表的结构

自定义候选属性

KeyAtrribute

KeyAtrribute 表示一张表里的主键,此列设置了 [Key] 则默认选择了 [Identity]自增选项 以及 [Reuired] 不可空

[Key]
public int Id{get;set;}

DataBaseAttribute

DataBaseAttribute 表示一张表所在的数据库名称

[DataBase("Hi.Ltd")]
public class Table
{

}

TableAttribute

TableAttribute 表示一张表名称,如有另设表框架,则需要设置Schema,表框架默认为"dbo"

[Table("Hi.Ltd")]  //未指定Schema时,默认数据库框架 dbo
public class Table    
{

}

[Table("Hi.Ltd",Schema="hi")] //指定Schema时,则按指定的Schema在数据库中建表
public class Table
{

}

DatabaseGeneratedAttribute

DatabaseGeneratedAttribute 用于指定主键是否为自增列,如果当前主键未设置则默认为(Data.DatabaseGeneratedOption.Identity)自增列,如果不想设置自增,则需要手动设置

[Key,DatabaseGenerated(Data.DatabaseGeneratedOption.None)]
public int Id{get;set;}   //此属性一定是与key 成对出现


[Key,DatabaseGenerated(Data.DatabaseGeneratedOption.Identity)]
public int Id{get;set;}  //此设定与 DatabaseGeneratedAttribute未指定时效果一样

MaxLengthAttribute

MaxLengthAttribute 用于指定字符串在长度,如无指定,则默认字符串的长度为50,如果存储到数据库的字段实际长度超过50,则必须指定

[MaxLength(450)]
public string Content{get;set;}  //此字段最大长度为450,以Unicode字符形式

public string Note{get;set;}  // 此字段最大长度为50,以Unicode字符形式 ,超出或报异常,或截断字符

RequiredAttribute

RequiredAttribute 用于指定当前字段存往数据库中是否可以为空值,如无指定则默认是可以为空值,如指定,则此字段必须不能为空

[Required,MaxLength(450)]
public string Content{get;set;}   //此字段不能为空
[MaxLength(450)]
public string Note{get;set;}   //此字段可以为空

ForeignKeyAttribute

ForeignKeyAttribute 用于指定从表与主表的关联信息,以及在主表操作删除或更新时,对从表的影响

[Table("Master",Schema="dbo")]
public class MasterTable                        //主表
{
        [Key, DisplayName("编号")]
        public int Id { get; set; }
        [DisplayName("日期"), Required]
        public DateTime DateTime { get; set; }
        [DisplayName("名称"), MaxLength(100)]
        public string Name { get; set; }
        [DisplayName("内容"), MaxLength(450)]
        public string Content { get; set; }
}

[Table("Slave",Schema="dbo")]
public class SlaveTable                         //从表
{
        [Key, DisplayName("编号")]
        public int Id { get; set; }
        [ForeignKey(typeof(MasterTable))]
        public int MasterId { get; set; }       //将MasterId与 Master表里的 Id进行映射绑定,此MasterId里的值必须是Master表里的 Id中有的,可以为空值
        [DisplayName("日期"), Required]
        public DateTime DateTime { get; set; }
        [DisplayName("名称"), MaxLength(100)]
        public string Name { get; set; }
        [DisplayName("内容"), MaxLength(450)]
        public string Content { get; set; }
}

[Table("Slave",Schema="dbo")]
public class SlaveTable                         //从表
{
        [Key, DisplayName("编号")]
        public int Id { get; set; }
        [ForeignKey(typeof(MasterTable),Option = TableDeleteOrUpdateOption.Cascade)]
        public int MasterId { get; set; }       //如果未指定Option的值,则默认为 TableDeleteOrUpdateOption.Restrict,即 如果从表中有匹配的记录,则不允许对主表对应候选键进行update/delete操作
        [DisplayName("日期"), Required]          //如果设置成TableDeleteOrUpdateOption.Cascade,即 主表上update/delete记录时,同步update/delete从表的匹配记录
        public DateTime DateTime { get; set; }   //如果设置成TableDeleteOrUpdateOption.Null,即 在主表上update/delete记录时,将从表上匹配记录的列设为null
        [DisplayName("名称"), MaxLength(100)]
        public string Name { get; set; }
        [DisplayName("内容"), MaxLength(450)]
        public string Content { get; set; }
}

DigitAttribute

DigitAttribute 用于指定数据类型为Decimal的字段,设置数据的长度以及保留的小数位数

[Digit(10,2)]
public decimal PressDecimal{get;set;}   //如未指定,则默认为 Digit(18,0)

方法解释

以下是演示数据表示例

 [Table("Navigation", Schema = "dbo"), DisplayName("导航表")]
    public class NavigationTable
    {
        [Key, DisplayName("编号")]
        public int Id { get; set; }
        [DisplayName("日期")]
        public DateTime DateTime { get; set; }
        [MaxLength(450), DisplayName("内容")]
        public string Content { get; set; }
        [MaxLength(450), DisplayName("备注")]
        public string Note { get; set; }
    }

[Table("Login", Schema = "dbo"),DisplayName("登录表")]

    public class Login : BaseTable
    {
        [Key, DisplayName("编号")]
        public int Id { get; set; }
        [Required, DisplayName("日期")]
        public DateTime DateTime { get; set; }
        [MaxLength(250),DisplayName("用户名")]
        public string UserName { get; set; }
        [MaxLength(250),DisplayName("密码")]
        public string Password { get; set; }
        [ForeignKey(typeof(NavigationTable)),DisplayName("导航编号")]
        public int NavigationId { get; set; }
    }

CreateDatabase

CreateDatabase 表示创建一个数据库,如果当前数据库不存在则创建,否则跳过

var sql = SqlEntities.Create;                //创建操作句柄
            sql.DataSource = "(local)";      //填写数据库服务器,当前设置为本地
            sql.UserId = "sa";               //填写用户名,如 用户名与密码不填写,则默认为本地登录 
            sql.Password = "Demo123456";     //填写密码,
            sql.Database = "Hi.Ltd";         //指定数据库名称,建议指定数据库名称,否则必须在每张表设定时指定数据库名称
            sql.Timeout = 10;                //设置连接超时时间(S),如不设定,则默认为15S


            sql.Connection(); 测试连接到数据库,如果连接成功则返回 true, 否则 返回 false;

              //创建数据库
             sql.CreateDatabase(sql.Database); //如无指定路径,则默认存储到 "C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA" 文件夹下
             //将创建的数据库存储在指定位置
             sql.CreateDatabase(sql.Database,@"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA");

CreateTable

CreateTable 表示创建一个数据表,如果当前数据表在数据库中已经存在则跳过,否则创建一个新的数据表


            sql.CreateTable<NavigationTable>(); //创建导航表

            //在指定数据库中创建导航表
            sql.CreateTable<NavigationTable>("Hi.Ltd"); //创建出来的表在数据库中显示为 [Hi.Ltd].[dbo].[Navigation] ,如果NavigationTable 表未指定Table属性,则在数据库中显示为[Hi.Ltd].[dbo].[NavigationTable]
            //在指定数据库中使用新的名称来创建导航表
            sql.CreateTable<NavigationTable>("Hi.Ltd","NewNavigation");  //创建出来的表在数据库中显示为 [Hi.Ltd].[dbo].[NewNavigation]            
            //在指定数据库中使用新的名称,新的架构来创建导航表
            sql.CreateTable<NavigationTable>("Hi.Ltd","NewNavigation","hi");   //创建出来的表在数据库中显示为 [Hi.Ltd].[hi].[NewNavigation]


            sql.CreateTable<Login>(); //创建登录表 ,其它方法使用同上

AlterTable

AlterTable 表示对表结构进行修改的相关操作,此操作具有一定的风险,只可在测试环境下使用,正式环境下不建议使用,此操作不可逆转,如删除无法找回



            sql.AlterTable<NavigationTable>(); //此方法将与数据库中的 [Hi.Ltd].[dbo].[Navigation] 进行比对,如果有表成员名称不同,则会在此表中新增一列数据。
                                               //如果名称相同,数据类型不同,则修改表对应成员的数据类型,
            //在指定数据库中修改导航表
            sql.AlterTable<NavigationTable>("Hi.Ltd"); 

            sql.AlterTable<NavigationTable>("Hi.Ltd","NewNavigation");

            sql.AlterTable<NavigationTable>("Hi.Ltd","NewNavigation","hi"); 


            sql.RenameColumn<NavigationTable>("Hi.Ltd","NewNavigation","hi","Note","NewNote"); //将表中的列名[Note]变更 [NewNote] ;


            sql.DropColumn<NavigationTable>("Hi.Ltd","Navigation","hi","Note"); //将表中的列名[Note]从表中移除,此操作必须慎重,如需要移除,请确保移除当前数据对程序或其它表没有任何影响;

            sql.RenameTable<NavigationTable>("Navigation","NewNavigation"); //将表名称由[Navigation]变更为[NewNavigation]

BackupDatabase

BackupDatabase 对一个已经存在的数据库进行备份操作,如指定的数据不存在,则跳过



            sql.BackupDatabase("Hi.Ltd"); //如不指定存储路径则默认存储在"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup"文件下,
                                          //如无指定文件名称,以指定的数据库名称命令,例如 :Hi.Ltd.bak

            sql.BackupDatabase("Hi.Ltd",@"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup");

            sql.BackupDatabase("Hi.Ltd",@"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup","backup");

RestoreDatabase

RestoreDatabase 从指定的存储路径还原数据库

            sql.RestoreDatabase("Hi.Ltd",@"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup","backup"); //如不指定存储路径则默认存储在"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup"文件下,
              
           //TODO:其它方法待完善

InsertTable

InsertTable 将数据表里插入一行数据,或批量插入数据


//初始一条数据,由于Id在数据库中设置了自增,所以不需要设置,如没有设置自增则必须设置Id值
  var content=new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表",
  Note=string.Empty
  };

  //初始化多条数据
  var content=new List<NavigationTable>()
  {

  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表1",
  Note=string.Empty
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表2",
  Note=string.Empty
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表3",
  Note=string.Empty
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表4",
  Note=string.Empty
  }
  };

            sql.InsertTable(content); //将数据库中插入一条数据
            //向指定数据库的数据表中插入一条数据
            sql.InsertTable("Hi.Ltd",content); 

            //向指定数据库的指定数据表中插入一条数据
            sql.InsertTable("Hi.Ltd","NewNavigation",content); 

            //向指定数据库的指定架构,指定数据表中插入一条数据
            sql.InsertTable("Hi.Ltd","NewNavigation","hi",content); 

            sql.InsertTable(contents); //将数据库中插入4条数据 ,以下同上


UpdateTable

UpdateTable 将数据表里更新一行数据,或批量更新数据


//初始一条数据,由于更新数据必须指定唯一主键,否则将不能确定此条数据是更新到哪里
  var content=new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表",
  Note=string.Empty,
  Id=1
  };

  //初始化多条数据
  var content=new List<NavigationTable>()
  {

  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表1",
  Note=string.Empty,
  Id=2
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表2",
  Note=string.Empty,
  Id=3
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表3",
  Note=string.Empty,
  Id=4
  },
  new NavigationTable(){
  DateTime=DateTime.Now,
  Name="这是一个导航表4",
  Note=string.Empty,
  Id=5
  }
  };

            sql.UpdateTable(content); //将数据库中更新一条数据
            //向指定数据库的数据表中更新一条数据
            sql.UpdateTable("Hi.Ltd",content); 

            //向指定数据库的指定数据表中更新一条数据
            sql.UpdateTable("Hi.Ltd","NewNavigation",content); 

            //向指定数据库的指定架构,指定数据表中更新一条数据
            sql.UpdateTable("Hi.Ltd","NewNavigation","hi",content); 

            sql.UpdateTable(contents); //将数据库中更新4条数据 ,以下同上


            //TODO 按条件批量更新整个数据表 待实现中,由于此操作风险过大,不推荐使用

InqureTable

InqureTable 将根据条件查询数据


            //默认查询最新的前1000条记录
            sql.InqureTable<NavigationTable>(); 
            //向指定数据库的数据表中更新一条数据
            sql.InqureTable<NavigationTable>("Hi.Ltd"); 

            //向指定数据库的指定数据表中更新一条数据
            sql.InqureTable<NavigationTable>("Hi.Ltd","NewNavigation"); 

            //向指定数据库的指定架构,指定数据表中更新一条数据
            sql.InqureTable<NavigationTable>("Hi.Ltd","NewNavigation","hi"); 

            //TODO 按条件查询正在实现中

DropTable

DropTable 从数据库中删除指定的表


            //从数据库中删除表
            sql.DropTable<NavigationTable>(); 
            //向指定数据库删除表
            sql.DropTable<NavigationTable>("Hi.Ltd"); 
            //向指定数据库中删除指定数据表
            sql.DropTable<NavigationTable>("Hi.Ltd","NewNavigation"); 
            //向指定数据库中删除指定架构的指定数据表
            sql.DropTable<NavigationTable>("Hi.Ltd","NewNavigation","hi"); 

DeleteTable

DeleteTable 从数据表中删除指定的内容


           //TODO 按条件删除正在实现中

以上是已经完成并且测试OK的功能,待实现的功能有数据表内容按条件删除,多表联查,多表联改,多表联删等

Product Compatible and additional computed target framework versions.
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 is compatible.  net461 is compatible.  net462 was computed.  net463 was computed.  net47 is compatible.  net471 is compatible.  net472 was computed.  net48 is compatible.  net481 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2025.4.21.1155 178 4/21/2025
2025.3.26.1023 471 3/26/2025
2025.3.21.1343 130 3/21/2025
2025.3.21.1209 137 3/21/2025
2025.2.18.1702 103 2/26/2025
2024.8.8.1134 130 8/8/2024
2024.8.6.1558 94 8/6/2024
2024.8.5.1700 71 8/5/2024
2024.4.8.1539 147 4/8/2024
2024.4.8.1521 122 4/8/2024
2024.4.7.1518 152 4/7/2024

修复更新操作的BUG,在操作表的同时必须创建表类型