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>外鍵:

-一般是在兩個表之間建立關系的時候,創建的

-當一個列為外鍵,它在另一個表必須是主鍵

-外鍵表中對應的外鍵列,值必須是對應主鍵表里的主鍵值

-一個表 ,可有多個外鍵

六.約束(持續更新...)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM