学习C#.NET、使用sqlserver数据库的总结

C#连接数据库总结

本教程使用sqlserver数据库演示

1.配置SqlServer数据库

  • 连接数据库服务器
  • 创建主数据库和日志文件
  • 创建数据表

1.连接数据库服务器

1.点击左侧连接图标

学习C#.NET、使用sqlserver数据库的总结

或者点击连接

学习C#.NET、使用sqlserver数据库的总结

2.点击数据库引擎(如果是第一种方法的跳至第三步)

学习C#.NET、使用sqlserver数据库的总结

3.服务器名称为local或一个点(.),身份验证选择sqlserver身份验证,登录名为sa,密码为安装时设置的密码

学习C#.NET、使用sqlserver数据库的总结

4.如果出现这种情况,说明SqlServer未打开

学习C#.NET、使用sqlserver数据库的总结

5.打开服务窗口,找到SQL Server(MSSQLSERVER),启动服务

学习C#.NET、使用sqlserver数据库的总结

2.创建数据库

通过可视化界面创建

创建数据库的第一种方式:SqlServer Management Studio管理工具进行可视化创建。

1.右键数据库,选择“新建数据库”

学习C#.NET、使用sqlserver数据库的总结

2.输入数据库名称,可以更改初始大小和自动增长

学习C#.NET、使用sqlserver数据库的总结

3.双击点开刚创建的数据库,找到“表”

学习C#.NET、使用sqlserver数据库的总结

通过Transact-SQL语句创建

1.点击新建查询

学习C#.NET、使用sqlserver数据库的总结

2.输入语句

创建数据库文件的基本格式:

create database <数据库名称> 
(
        filename = [完整路径],
        name = [数据库名称],
        size = [初始大小],
        maxsize = [最大大小],
        filegrowth = [增长率] --增长率可以使用mb,%做单位
)

创建用于管理用户数据的数据库:

create database db_userManager
on primary--创建主数据库标志,primary表示属于primary文件组,默认属于primary,可省略
(
        filename = "C:\db_userManager.mdf", 
        --filename指主数据库的物理名称,决定了数据库文件的存储位置,必须是完整路径
        
        name = "userManager",
        --name指主数据库的逻辑名称,决定在数据库管理器中的名称
        
        size = 5mb,
        --size指主数据库的初始大小
        
        maxsize = 10mb,
        --maxsize指主数据库的最大大小
        
        filegrowth = 10%
        --filegrowth指主数据库从初始大小增长的增长率
)
log on --创建数据库的日志文件的标志
(
        filename = "C:\db_userManager.ldf",
        name = "userManager_log",
        size = 1mb,
        maxsize = 5mb,
        filegrowth = 1mb
)

3.创建数据表

通过可视化界面创建

9.右键表,选择”新建表“

学习C#.NET、使用sqlserver数据库的总结

10.输入列名、数据类型

学习C#.NET、使用sqlserver数据库的总结

11.右键“name”列,选择“设置主键”

学习C#.NET、使用sqlserver数据库的总结

12.右键选项卡,选择“保存” 或 Ctrl + s

学习C#.NET、使用sqlserver数据库的总结

13.双击“表”,即可找到你创建的表了:)

学习C#.NET、使用sqlserver数据库的总结

14.如果想查看表中的内容,右键表,选择“编辑前200行”

学习C#.NET、使用sqlserver数据库的总结

通过Transact-SQL语句创建

创建数据表的基本格式:

create table <数据表名称>
(
        [字段名称] [数据类型](数据大小) [字段约束],
        ......
)

创建用于存储用户账号密码的信息:

use db_userManager--设置当前数据库为db_userManager
go --批处理的分隔符,用于接续后面的语句
create table tb_user
(
        name varchar(20) primary key,
        pwd varchar(20),
        --varchar表示存储可变长度的字符串类型,括号内可设定初始大小
        time datetime
        --datetime表示存储年月日时分秒的时间
)
类型长度使用说明长度说明
char(n)定长索引效率高 程序里面使用trim去除多余的空白n 必须是一个介于 1 和 8,000 之间的数值,存储大小为 n 个字节
varchar(n)变长效率没char高 灵活n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节
text(n)变长非Unicode数据不用指定长度
nchar(n)定长处理unicode数据类型(所有的字符使用两个字节表示)n 的值必须介于 1 与 4,000 之间。存储大小为 n 字节的两倍
nvarchar(n)变长处理unicode数据类型(所有的字符使用两个字节表示)n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零
ntext(n)变长处理unicode数据类型(所有的字符使用两个字节表示)不用指定长度

为name属性增加约束primary key,也就是将它设置为这张表的主键,主键唯一标识了数据表中的一条记录,设定为主键的属性自动添加 unique 和 not null 约束。

unique:英语意思为独一无二的,保证该属性的值不能重复

not null:字面意思,就是保证该属性的值不能为空(NULL)

注意直接添加unique和not null约束,与添加primary key约束不同,一张数据表只能设置一个主键,一张数据表也应该设置一个主键。

2.用C#连接数据库

1.需要的动态链接库(DLL)

在编写代码之前,先来了解一下需要用到的动态链接库(DLL)。

DLL类库功能
System.Data.SqlClient这个类集合用于访问托管空间中的 SQL Server 数据库

这是微软官方给出的介绍,简单总结一下就是这个类库是用来连接数据库,执行Transact-SQL语句,添加、更新、读取数据的。

了解需要用到的类库后,我们需要知道需要使用其中的哪些类。

作用
SqlConnectionSQL Server 数据库的一个打开的连接。
SqlCommand对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。
SqlDataAdapter用于填充DataSet(临时数据库)与DataTable(临时数据表),也可以用来更新数据库
SqlParameterSqlCommand的参数,也可以用于DataSet与DataTable的映射

2.数据库读写

数据写入数据库:

using System.Data.SqlClient;
class SqlServerWriter : from
{
        //sqlserver连接字符串
        string connString = "server = .;database = db_userManager;user id = sa;password = 123;";
        
        //注册按钮事件
        private void btn_regitor_Click(object seeder,EventArg e)
        {
                //检测账号、密码是否为空
                if(!(string.IsNullOrWhiteSpace(txt_username.Text) || string.IsNullOrWhiteSpace(txt_password.Text)))
                {
                        try
                        {
                                //创建连接
                                SqlConnection conn = new SqlConnection(connString);
                                //打开连接
                            conn.Open();
                            
                            //Transact-SQL语句
                            string command = "insert into tb_user (name,pwd,time) values (@username,@password,@time)";
                            
                            //创建参数映射
                            SqlParameter[] paras = 
                            {
                                new SqlParameter("@username",DbDataType.Varchar,20),
                                new SqlParameter("@paasword",DbDataType.Varchar,20),
                                new SqlParameter("@time",DbDataType.DateTime)
                            };
                            paras[0].Value = txt_username.Text;
                            paras[1].Value = txt_password.Text;
                            paras[2].Value = DateTime.UtcNow.ToString();
                            
                            //将参数传给command语句
                            foreach(SqlParameter para in paras)
                            {
                                cmd.Parameter.Add(para);
                            }
                            
                            //创建command语句
                            SqlCommand cmd = new SqlCommand(command,conn);
                            
                            //执行并判断是否成功
                            if(cmd.ExcuteQaurt() > 0)
                            {
                                MessageBox.Show("注册成功!");
                            }
        
                                conn.Close();//关闭与数据库的连接,并释放内存
                        }
                        catch(Exception _e)
                        {
                                //出现主键约束冲突,说明用户名已被注册
                            if(_e.message.IndexOf("PRIMARY KEY") >= 0)
                            {
                                MessageBox.Show("用户名已被注册!")
                            }
                            MessageBox.Show(_e.message);
                            throw;
                        }
                }
        }
}

从数据库读取数据:

using System.Data.SqlClient;

class SqlServerReader : from
{
        bool isNotFound = false;//标识用户名是否找到

        private void btn_login_Click(object seeder,EventArg e)
        {
                try
                {
                         SqlConnection conn = SqlConnection(connString);
                         conn.Open();
                        
                         string command = "select * from tb_user"
                         SqlCommand cmd = new SqlCommand(command,conn);
                         
                         SqlDataAdpter dataAdpter = new SqlDataAdpter(cmd);//通过数据适配器执行命令
                         DataTable dt = new DataTable();//创建一张临时数据表
                         dataAdpter.Fill(dt);//将命令执行的结果存入临时数据表
                         dataAdpter.Dispose();//释放适配器的内存
                         
                         //查找用户名、密码是否匹配
                         for(int i = 0;i < dt.Rows.Count;i++)
                         {
                                isNotFound = false;
                            if(dt.Rows[i]["name"] == txt_username.Text)
                            {
                                if(dt.Rows[i]["pwd"].Text == txt_password.Text)
                                {
                                    MessageBox.Show("登录成功!");
                                    break;
                                }
                            }
                            else
                            {
                                isNotFound = true;
                                }
                         }
                         
                         dt.Dispose();//释放临时数据表内存
                
                        if(isNotFound)
                        {
                                MessageBox.Show("用户名不存在!");
                        }
                        
                        conn.Close();//关闭与数据库的连接,并释放内存
                }
                catch(Exception _e)
                {
                        MessageBox.Show(_e.message);
                        throw;
                }
        }
}