当前位置: 首页 > news >正文

C#——SQLServer数据库入门

  • 学习目标:通过本文,读者将学会使用C#连接SQL Server、执行基本SQL操作,并理解关键概念。
  • 环境准备:确保安装Visual Studio(推荐最新版)、SQL Server Express或更高版本,以及SQL Server Management Studio (SSMS)。

一.SQL Server Management Studio的简单运用

首先,在这里我们创建我们的数据库。

这里可以填写数据库的名称和文件所创建的位置。

创建完整后,我们的TestDB会出现在数据库下的根目录下面。

在创建的数据库下选择表右机选择新建表。

在右边表格处,填写列名和数据类型。

注意:右边可以选择这边的列名是否可以有null值。

找到我们创建的表右键选择前1000行,会出现我们刚刚创建的表格数据。

右击编辑前200行可以在表格里面ti'a

点击新建查询可以通过使用sql语句对表格进行操作。

二.SQL语句的简单运用

SQL语句——查询,新增,删除,修改

--取
select UserName,Password,NikeName from UserT--存
insert into UserT(UserName,Password,NikeName) values('111','222','333')--删除
delete from UserT where UserName='111'--修改
update UserT set UserName='我是大帅哥'

在SQL Server Management Studio里面选择写的sql语句点击执行即可。


取:


存:


删除:


修改:

SQL语句——更改主键

:用于唯一标识记录,确保数据的唯一性和完整性,不能包含 NULL 值。

三.C#连接数据库的简单运用

1.取

首先,我们创建一个C#的项目模板——控制台应用(.NET Framework)。

//创建并配置数据库连接
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";//打开数据库连接
conn.Open();
//创建SQL命令对象,并设置SQL命令和连接
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from UserT;";//创建数据适配器对象,并设置SQL命令
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;//创建DataSet对象,并使用数据适配器填充数据
DataSet ds = new DataSet();
adapter.Fill(ds);//关闭数据库连接
conn.Close();//从DataSet中获取数据表,并遍历输出指定列的值
DataTable table = ds.Tables[0];
for (int i = 0; i < table.Rows.Count; i++)
{Console.WriteLine($"{table.Rows[i]["AdminID"]}{table.Rows[i]["Pwd"]}{table.Rows[i]["Name"]}");
}

注意:在这里我们采用Windows默认的方式连接

如上代码的流程是:

  1. 创建并配置数据库连接。

  2. 打开数据库连接。

  3. 创建SQL命令对象,并设置SQL命令和连接。

  4. 创建数据适配器对象,并设置SQL命令。

  5. 创建DataSet对象,并使用数据适配器填充数据。

  6. 关闭数据库连接。

  7. DataSet中获取数据表,并遍历输出指定列的值。

数据库连接部分

SqlConnection conn = new SqlConnection();
  • 作用:创建一个SqlConnection对象,用于建立与SQL Server数据库的连接。

  • 解释SqlConnection是.NET框架中用于与SQL Server数据库进行交互的类。

conn.ConnectionString = "Server=localhost;Database=TestDB;Trusted_Connection=true;";
  • 作用:设置连接字符串,指定数据库服务器、数据库名称和身份验证方式。

  • 解释

    • Server=localhost:指定数据库服务器地址为本地计算机。

    • Database=TestDB:指定要连接的数据库名称为TestDB

    • Trusted_Connection=true:使用Windows身份验证方式连接数据库,不需要手动输入用户名和密码。

conn.Open();
  • 作用:打开数据库连接。

  • 解释:在执行任何数据库操作之前,必须先打开连接。

SQL命令和数据适配器部分

SqlCommand cmd = new SqlCommand();
  • 作用:创建一个SqlCommand对象,用于执行SQL命令。

  • 解释SqlCommand是.NET框架中用于执行SQL语句的类。

cmd.Connection = conn;
  • 作用:将SqlCommand对象与前面创建的数据库连接对象conn关联起来。

  • 解释:这样SqlCommand对象就知道使用哪个数据库连接来执行SQL命令。

cmd.CommandText = "select * from UserT;";
  • 作用:设置要执行的SQL命令。

  • 解释:这里设置的SQL命令是查询UserT表中的所有数据。

SqlDataAdapter adapter = new SqlDataAdapter();
  • 作用:创建一个SqlDataAdapter对象,用于将数据从数据库加载到内存中的DataSet对象。

  • 解释SqlDataAdapter是.NET框架中用于数据填充的类。

adapter.SelectCommand = cmd;
  • 作用:将SqlCommand对象赋值给SqlDataAdapterSelectCommand属性。

  • 解释:这样SqlDataAdapter就知道使用哪个SQL命令来获取数据。

DataSet ds = new DataSet();
  • 作用:创建一个DataSet对象,用于在内存中存储数据。

  • 解释DataSet是.NET框架中用于存储和操作数据的类,类似于一个内存中的数据库。

adapter.Fill(ds);
  • 作用:将从数据库中查询到的数据填充到DataSet对象中。

  • 解释Fill方法会执行SelectCommand中的SQL命令,并将结果存储到DataSet中。

数据处理部分

conn.Close();
  • 作用:关闭数据库连接。

  • 解释:在完成数据操作后,应该关闭数据库连接,释放资源。

DataTable table = ds.Tables[0];
  • 作用:从DataSet中获取第一个DataTable对象。

  • 解释DataSet可以包含多个DataTable,这里获取的是第一个表。

for (int i = 0; i < table.Rows.Count; i++)
{Console.WriteLine($"{table.Rows[i]["UserName"]}{table.Rows[i]["Password"]}{table.Rows[i]["NikeName"]}");
}
  • 作用:遍历DataTable中的每一行,并输出指定列的值。

  • 解释

    • table.Rows.Count:获取表中的行数。

    • table.Rows[i]:获取第i行的数据。

    • table.Rows[i]["UserName"]:获取第i行中UserName列的值。

    • Console.WriteLine:将获取到的值输出到控制台。


拓展:

DataTable的底层理解:DataTable底层采用行集结构,每一行是一个独立的对象,类似于链表。当将DataTable数据填充到数组时,通常是逐行遍历,将每行的ItemArray(内部存储数据的数组)复制到目标数组。这种实现支持动态扩展行,但填充到数组的性能不如直接二维数组快。

2.存

// 创建一个新的SQL连接对象,用于与SQL Server进行通信
SqlConnection conn = new SqlConnection();
// 设置连接字符串,指定了服务器名称、数据库名称以及身份验证方式
conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";
// 打开连接,与SQL Server建立会话
conn.Open();// 定义用户信息
string AdminID = "222";
string Pwd = "222";
string Name = "222";
// 构造SQL插入语句(采用字符串拼接方式,容易导致安全问题)
string insertSQL = $"insert into UserT values('{AdminID}','{Pwd}','{Name}');";// 创建一个SQL命令对象,用于执行SQL语句
SqlCommand cmd = new SqlCommand(insertSQL, conn);
// 执行插入语句,并返回受影响的行数。该方法适用于不返回结果集的命令,如插入、更新和删除操作
int count = cmd.ExecuteNonQuery();// 关闭连接,释放资源
conn.Close();
// 输出执行结果
Console.WriteLine($"执行新增语句,受影响的行数是:{count}");

3.封装的存取方法

接下来我们要对下面这段进行封装。

 static void Main(string[] args){// 创建一个新的SQL连接对象,用于与SQL Server进行通信SqlConnection conn = new SqlConnection();// 设置连接字符串,指定了服务器名称、数据库名称以及身份验证方式conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";// 打开连接,与SQL Server建立会话conn.Open();// 定义用户信息string AdminID = "222";string Pwd = "222";string Name = "222";// 构造SQL插入语句(采用字符串拼接方式,容易导致安全问题)string insertSQL = $"insert into UserT values('{AdminID}','{Pwd}','{Name}');";// 创建一个SQL命令对象,用于执行SQL语句SqlCommand cmd = new SqlCommand(insertSQL, conn);// 执行插入语句,并返回受影响的行数。该方法适用于不返回结果集的命令,如插入、更新和删除操作int count = cmd.ExecuteNonQuery();// 关闭连接,释放资源conn.Close();// 输出执行结果Console.WriteLine($"执行新增语句,受影响的行数是:{count}");}

下面是封装后的语句。

   static void Main(string[] args){// 定义用户信息string AdminID = "111";string Pwd = "222";string Name = "222";// 构造SQL插入语句(采用字符串拼接方式,容易导致安全问题)string insertSQL = $"insert into UserT values('{AdminID}','{Pwd}','{Name}');";int count = EditDate(insertSQL);if (count>0){Console.WriteLine($"新增成功,新增{count}条数据");}else{Console.WriteLine("新增数据失败");}}public static int EditDate(string sql){//连接数据库SqlConnection conn = new SqlConnection();//要连接的数据要操作的数据库文件 采用windows conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);int count = 0;try{count = cmd.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex);}conn.Close();return count;}

4.封装的删方法

static void Main(string[] args)
{string sql = "delete from UserT where AdminID ='222';";int count = EditDate(sql);if (count>0){Console.WriteLine($"删除成功,新增{count}条数据");}else{Console.WriteLine("删除数据失败");}}
public static int EditDate(string sql)
{//连接数据库SqlConnection conn = new SqlConnection();//要连接的数据要操作的数据库文件 采用windows conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);int count = 0;try{count = cmd.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex);}conn.Close();return count;}

5.封装查询方法

static void Main(string[] args)
{string sql = "delete from UserT where AdminID ='111';";int count = EditDate(sql);if (count>0){Console.WriteLine($"删除成功,新增{count}条数据");}else{Console.WriteLine("删除数据失败");}sql = "select * from UserT;";DataTable dt = SelectDate(sql);for (int i = 0; i < dt.Rows.Count;i++){Console.WriteLine($"{dt.Rows[i]["AdminID"]}{dt.Rows[i]["Pwd"]}{dt.Rows[i]["Name"]}");}Console.ReadKey();
}
public static int EditDate(string sql)
{//连接数据库SqlConnection conn = new SqlConnection();//要连接的数据要操作的数据库文件 采用windows conn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);int count = 0;try{count = cmd.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex);}conn.Close();return count;}
public static DataTable SelectDate(string sql)
{// 连接数据库SqlConnection conn = new SqlConnection();//要连接的数据 要操作的数据库文件采用windowsconn.ConnectionString = "Data Source=DESKTOP-TKS3EDJ\\TEW_SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=True;Encrypt=False";conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;cmd.CommandText = sql;SqlDataAdapter adapter = new SqlDataAdapter();adapter.SelectCommand = cmd;DataSet ds = new DataSet();adapter.Fill(ds);conn.Close();DataTable table = ds.Tables[0];return table;}
http://www.dtcms.com/a/349456.html

相关文章:

  • **FastAPI + Pydantic v2 + JSON‑RPC 2.0**,实现 A2A 规范核心方法
  • 什么是转入原注册商?
  • C++STL---count() 统计容器中特定元素出现次数
  • linux 正则表达式学习
  • 虚拟化技术 ——KVM
  • Redis常规指令及跳表
  • 机器学习--朴素贝叶斯
  • 零基础-动手学深度学习-13.1. 图像增广
  • 使用烛线图展示二进制01离散量趋势图
  • 嵌入式GPIO外设深度技术解析:从基础原理到高级应用
  • 开源 C++ QT Widget 开发(六)通讯--TCP调试
  • 微软恶意软件删除工具:官方免费的系统安全防护利器
  • CentOS安装Jenkins全流程指南
  • 3-1.Python 函数 - 函数基础(函数概述、函数的定义与调用、函数文档)
  • 8.25 朴素贝叶斯
  • [AI] Firebase Studio :AI+云端 IDE
  • C++深度优先搜素
  • 说明哈夫曼树查询过程的例子
  • 基于MATLAB的遥感图像变化检测
  • 嵌入式系统学习Day22(进程)
  • 【React】案例:B站评论
  • C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
  • Coze用户账号设置修改用户头像-后端源码
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 容器学习day02
  • [React]Antd Cascader组件地区选择
  • SpringBoot整合Elasticsearch
  • SQL语法指南
  • Docker基本使用方法和常用命令
  • Spring文件上传核心技术解析