• 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>外键:

    -一般是在两个表之间建立关系的时候,创建的

    -当一个列为外键,它在另一个表必须是主键

    -外键表中对应的外键列,值必须是对应主键表里的主键值

    -一个表 ,可有多个外键

    六.约束(持续更新...)

     

  • 相关阅读:
    There is no getter for property named 'XXX' in 'class java.lang.String'解决方法
    BigDecimal类型转换
    根据一个字段多值查询(正则)
    Innodb与Myisam引擎的区别与应用场景
    页面输入框查找乱码问题
    Oracle做insert或者update时未提交事务导致表锁定解决办法
    sql语句表连接删除
    Update修改方法判断该ID的数据是否超过24小时,超过不许修改
    如何确定dbgrid选择的是记录而不是分组
    sql server2005的死锁
  • 原文地址:https://www.cnblogs.com/dfcq/p/12966747.html
Copyright © 2020-2023  润新知