C# 连接sqlServer数据库
连接sqlServer数据库
一.创建数据库
在用[Microsoft SQL Server Management Studio]工具,建立一个数据库,然后执行下面脚本
CREATE TABLE [dbo].[Company]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](500) NULL, [CreateTime] [datetime] NOT NULL, [CreatorId] [int] NOT NULL, [LastModifierId] [int] NULL, [LastModifyTime] [datetime] NULL, CONSTRAINT [PK_Company] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO INSERT INTO [dbo].[Company] ([Name] ,[CreateTime] ,[CreatorId] ,[LastModifierId] ,[LastModifyTime]) VALUES ('腾讯' ,'2020-05-26' ,1 ,1 ,'2020-05-26') 二.
二.设置App.config中的连接字符串,如下
Data Source=服务器名;Database=数据库名;User ID=用户名;Password=密码,这些参数需要根据自己的情况,重新设置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <connectionStrings> <add name="DBConnect" connectionString="Data Source=localhost;Database=Text_DB;User ID=sa;Password=123"/> </connectionStrings> </configuration>
三,执行下面的代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data.SqlClient; 7 using System.Configuration; 8 using Ruanmou.Model; 9 using System.Reflection; 10 11 namespace _001_Text 12 { 13 class Program 14 { 15 /// <summary> 16 /// 从App.config中获取连接数据库字符串 17 /// </summary> 18 private static string SqlServerConnString = ConfigurationManager.ConnectionStrings["DBConnect"].ConnectionString; 19 static void Main(string[] args) 20 { 21 Company commpany = Find<Company>(1); 22 Console.WriteLine(commpany.Name); 23 Console.WriteLine(commpany.CreateTime); 24 Console.WriteLine(commpany.CreatorId); 25 Console.ReadKey(); 26 } 27 public static T Find<T>(int id) 28 { 29 Type type = typeof(T); 30 string columnString = string.Join(",", type.GetProperties().Select(p => $"[{p.GetColumnName()}]")); 31 string sql = $"SELECT {columnString} FROM [{type.Name}]"; 32 T t = (T)Activator.CreateInstance(type); 33 using (SqlConnection conn = new SqlConnection(SqlServerConnString)) 34 { 35 SqlCommand command = new SqlCommand(sql, conn); 36 conn.Open(); 37 SqlDataReader reader = command.ExecuteReader(); 38 while (reader.Read()) 39 { 40 foreach (var prop in type.GetProperties()) 41 { 42 prop.SetValue(t, reader[prop.Name] is DBNull ? null : reader[prop.Name]); 43 } 44 } 45 } 46 return t; 47 } 48 } 49 50 /// <summary> 51 /// 扩展方法,静态类,静态字段,this这几个特征组成的 52 /// </summary> 53 public static class AttributeHelper 54 { 55 public static string GetColumnName(this PropertyInfo prop) 56 { 57 if (prop.IsDefined(typeof(ColumnAttribute), true)) 58 { 59 ColumnAttribute columnName = (ColumnAttribute)prop.GetCustomAttribute(typeof(ColumnAttribute), true); 60 return columnName.GetColumnName(); 61 } 62 else 63 { 64 return prop.Name; 65 } 66 } 67 } 68 69 /// <summary> 70 /// 反射类 71 /// </summary> 72 [AttributeUsage(AttributeTargets.Property)]//表示此反射类只能修饰属性 73 public class ColumnAttribute : Attribute 74 { 75 private string _ColumnName = string.Empty; 76 public ColumnAttribute(string name) 77 { 78 this._ColumnName = name; 79 } 80 public string GetColumnName() 81 { 82 return _ColumnName; 83 } 84 } 85 }
执行结果如下图
四,知识补充
连接数据,主要用到了3个类
1>数据库连接类:SqlConnetion
位于System.Data.SqlClient的命名空间下
2>数据库命令类:SqlCommand
主要执行对数据库的操作,比如插入、删除、修改等
3>数据库读取类:SqlDataReader
是SqlCommand执行了查询操作后,返回的数据类型
其中,三个比较常用的方法
ExecuteNonQuery():提交无查询结果的SQL语句,如UPDATE,INSERT,DELETE等语句,其返回值为数据库中被SQL语句影响的行数;
ExecuteReader():提交SELECT语句,返回值是一个数据流,里面是SELECT语句的查询结果,可以用SqlDataReader对象来接收,然后调用其Read()方 法来逐行读出查询结果;
ExexuteScalar():提交SELECT语句,但是其返回值是查询结果的第一行第一列,所以适用于例如COUNT等聚合查询。
数据库知识(持续更新...)
一.创建数据库
创建数据库可以用工具(SOL Server Management)创建,或者脚本创建。如果要工具创建数据库,需要注意几点
1>服务器类型:选择【数据库引擎】
2>服务器名称
这里分连接本地数据库,还是远程数据库
-连接本地数据库:直接填【.】或者【Local】或者【本机的IP地址】
-连接远程服务器:【远程服务器的IP,端口号】
3>身份验证有两个选项,一般选择SQL Server身份验证,Windows身份验证相当于管理者的身份,可用于创建新的登录用户名和设置权限
二.数据库的组成
一般创建完数据库,会生成两个文件,后缀分别是.mdf和.ldf
1>.mdf是主要数据文件,存放数据和数据库初始化信息,每个数据库必须有一个.mdf的文件
2>.nd次要数据文件,可以有也可以没有,可多个。存放除主要数据文件外的所有文件
3>.ldf日志文件,存放数据库操作信息,用于恢复数据库的日志信息。可多个。
文件组是什么?实现数据库本身就是文件,文件组就是用来管理数据库的,可以吧数据库文件分成不同的文件组,方便管理。
下面两个图中,可以看到,Primary是主要文件组
三,数据库常用对象
1>表:数据库中所有数据对象,包含行,列。用于组织存储数据
2>字段:表中的列。列中有名称,数据类型
3>视图:可以理解为一个虚拟表,从一张表或者多张表中数据进行联合查询,而形成的一个虚拟表
4>索引:为了快速访问数据和定位。类似word文档中的目录。
5>存储过程:完成特定功能的SQL语句,可以一条和多条语句的集合(增,删,改,查)
6>触发器:针对表来说的,对表执行增删改时,命令自动触发而去执行。属于用户自定义的SOL事物命令集合。
7>约束:对列的限制
8>缺省值:对列指定的默认值。当插入列时候,没有值的时候,此时自动填入默认值。
四.数据类型
1>数值类型
-整型:bigint (8字节)>int(4字节)>smalint(2字节)>tinyint(1字节)
-浮点型:float近似值,处在精度损失。
real=float(24)也是近似值。
decimal 精度准确,不存在精度损失。decimal(18,2)表示:小数点前后一个有18位,小数点后有2位。
-货币类型:money,smallmoney
2>字符型
-Character字符串
char(n),固定长度字符串,不足的补空,最大8000个字符
varchar(n),可变长度字符串,最大8000个字符,建议都是英文字符
vatchar(max),可变长度字符串
text,可变长度,最多2GB字符数据
-Unicode字符串:
nchar(n),固定长度Unicade数据,最大4000字符
nvarchar(n),可变长度,最大4000字符,建议有中文和英文的情况
nvarchar(max),可变长度
ntext,可变长度,最大2GB
前面带n的,存储中文或英文,长度是1,存储大小2个字节。不带n的都是1个字节。中文是2个长度的
3>日期类型
datetime 精度高,用的多
4>其他类型
uniqueidentifier,存储全局标识符(GUID)
xml,存储xml格式的数据
五,创建表和主键及外键
1>主键:一个表中,有很多数据,需要一个列来标识一条数据。不能为空,不能重复。标识列:不能手动插入,插入时,自动生成的。
2>外键:
-一般是在两个表之间建立关系的时候,创建的
-当一个列为外键,它在另一个表必须是主键
-外键表中对应的外键列,值必须是对应主键表里的主键值
-一个表 ,可有多个外键
六.约束(持续更新...)
SQL-三张表关联查询(INNER JOIN)
【使用场景】:
A,B,C三张表,B表中有一个字段和A表中一个字段相同;同时B表有个字段和C表中一个字段相同,称B表为“中间表”。
需求:查询并展示A表和C表中的某些字段
SELECT A1,A2,C1,C2 --展示A表中的A1\A2字段和C表中的C1\C2 FROM B --中间表 INNER JOIN A ON A.A1 = B.B1 --A表中的与B表中相同的字段 INNER JOIN C ON C.C1 = B.B1 --C表中的与B表中相同的字段 where xxxxx ---条件你自己按照需求来加,没有条件就不写where了
怎么创建SQLite数据库
方法:使用sqlite3创建
步骤:
一、SQLite数据库的创建
1>. 安装SQLite数据库(在Windows上安装SQLite)
SQLite以其零配置而闻名,所以不需要复杂的设置或管理。其本身就只是一个.db文件,哪里需要就拷贝到哪里就好了。
安装按照以下步骤进行:
1.打开SQLite官方网站或直接点击下载页面 - http://www.sqlite.org/download.html 并下载预编译的Windows二进制文件。
2.下载sqlite-dll的zip文件以sqlite-tools-win32-x86-3170000.zip文件。(-dll文件,32位选择32位的,64位选择64的)
3.在本地磁盘创建sqlite文件夹,如我的地址为:D:\sqlite
4.将下载的zip包在D:\sqlite这个路径下解压,得到如下程序
5.打开【sqlite3.exe】,然后在【sqlite>后面输入:.open 数据库名.db】。
例如:建立一个RYMeter.DB的数据库执行如下图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?