DB类的学习

server/2024/10/19 15:40:39/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data; //引用三个命名空间
using System.Data.SqlClient;
using System.Configuration;/// <summary>
/// DB 的摘要说明
/// </summary>
public class DB
{public DB(){//// TODO: 在此处添加构造函数逻辑//}/// <summary>/// 用于执行返回单个值的select语句/// </summary>/// <param name="sql">只返回单个值的select语句</param>/// <returns>查到的一个值,查询失败返回null</returns>// 定义一个公开的方法,该方法接受一个SQL查询字符串作为参数,并返回一个object类型的值。  
public object queryOneValue(string sql)  
{  // 从Web.config文件中获取名为"myDBConnectionString"的数据库连接字符串。  string connStr = ConfigurationManager.ConnectionStrings["myDBConnectionString"].ConnectionString;  // 使用上面获取的连接字符串构造一个SqlConnection对象,用于与数据库建立连接。  SqlConnection conn = new SqlConnection(connStr);  try  {  // 打开数据库连接。  conn.Open();  // 使用提供的SQL查询字符串和已建立的数据库连接构造一个SqlCommand对象。  SqlCommand comm = new SqlCommand(sql, conn);  // 执行SqlCommand对象中的SQL命令,并返回查询结果中的第一行第一列的值(如果有的话)。  // 这通常用于返回单个值,如COUNT(*)的结果或SELECT TOP 1 ...的结果。  object ret = comm.ExecuteScalar();  // 返回查询到的值(如果有的话)。  return ret;  }  catch (Exception ex)  {  // 如果在执行过程中发生任何异常,捕获该异常并返回null。  // 这里应该记录异常信息以便后续调查,但此示例中未显示。  return null;  }  finally  {  // 无论是否发生异常,都会执行finally块中的代码。  // 检查数据库连接是否仍然打开。  if (conn.State == ConnectionState.Open)  {  // 如果连接是打开的,则关闭它。  conn.Close();  }  }  
}// 定义一个公开的方法,该方法接受一个SQL命令字符串作为参数,并返回一个int类型的值。  
// 通常,这个返回值表示受影响的行数。  
public int ExecuteNonQueryCommand(string sql)  
{  // 从Web.config文件中获取名为"myDBConnectionString"的数据库连接字符串。  string connStr = ConfigurationManager.ConnectionStrings["myDBConnectionString"].ConnectionString;  // 使用上面获取的连接字符串构造一个SqlConnection对象,用于与数据库建立连接。  SqlConnection conn = new SqlConnection(connStr);  try  {  // 打开数据库连接。  conn.Open();  // 使用提供的SQL命令字符串和已建立的数据库连接构造一个SqlCommand对象。  SqlCommand comm = new SqlCommand(sql, conn);  // 执行SqlCommand对象中的SQL命令,并返回受影响的行数。  // 这通常用于执行INSERT、UPDATE、DELETE等不返回结果集的命令。  int ret = comm.ExecuteNonQuery();  // 返回受影响的行数。  return ret;  }  catch (Exception ex)  {  // 如果在执行过程中发生任何异常,捕获该异常并返回一个特殊的值(-1)表示操作失败。  // 这里应该记录异常信息以便后续调查,但此示例中未显示。  return -1;  }  finally  {  // 无论是否发生异常,都会执行finally块中的代码。  // 检查数据库连接是否仍然打开。  if (conn.State == ConnectionState.Open)  {  // 如果连接是打开的,则关闭它。  conn.Close();  }  }  
}

  1. 使用 ExecuteScalar 时,你应确保SQL查询返回单个值(或没有值,这将返回null)。如果查询返回多行多列的数据,则 ExecuteScalar 将只返回第一行第一列的值,并忽略其他行和列。
  2. 在使用数据库连接时,使用 try-catch-finally 结构可以确保即使在发生异常的情况下,连接也能被正确关闭。这是一个很好的编程实践。

"不返回结果集" 指的是执行 SQL 语句后,数据库不会返回一个可以逐行读取的数据集(如查询结果)。对于 SQL 语句,我们可以大致分为两类:返回结果集的语句和不返回结果集的语句。

返回结果集的语句

这类语句通常用于从数据库中检索数据,例如 SELECT 语句。当你执行一个 SELECT 语句时,数据库会返回一个结果集,你可以遍历这个结果集来读取查询到的数据。

不返回结果集的语句

这类语句通常用于修改数据库中的数据或结构,而不是检索数据。以下是一些不返回结果集的 SQL 语句的例子:

  1. 数据修改语句
    • INSERT:向表中插入新行。
    • UPDATE:更新表中的现有行。
    • DELETE:从表中删除行。
  2. 数据定义语句
    • CREATE:创建新的数据库、表、索引等。
    • ALTER:修改现有的数据库、表、索引等。
    • DROP:删除数据库、表、索引等。
  3. 其他
    • SET:在事务中设置变量或更改数据库会话的某些设置。
    • TRUNCATE:删除表中的所有行,但不记录单独的行删除操作。

当执行这些不返回结果集的语句时,SqlCommand.ExecuteNonQuery() 方法被用于执行命令。它返回一个整数,表示受影响的行数(对于 INSERTUPDATE 和 DELETE 语句)或表示命令是否成功执行(对于 CREATEALTER 和 DROP 语句,尽管不是所有数据库系统都会为这些命令返回受影响的行数)。

总结

"不返回结果集" 意味着执行 SQL 语句后,你不会得到一个可以逐行读取的数据集。相反,你可能会得到一个表示受影响的行数的整数,或者只是一个表示命令是否成功执行的确认。


http://www.ppmy.cn/server/42051.html

相关文章

JVM学习-虚拟机栈

虚拟机栈 每个线程创建时都会创建一个虚拟机栈&#xff0c;其内部保存一个个栈帧&#xff0c;对应一次次Java方法调用&#xff0c;栈是线程私有的。 生命周期: 与线程相同 作用 主管Java程序的运行&#xff0c;它保存方法的局部变量、部分结果、并参与方法的调用和返回。 …

泽攸科技无掩模光刻机:引领微纳制造新纪元

在当今科技迅猛发展的时代&#xff0c;微纳制造技术正变得越来越重要。泽攸科技作为这一领域的先行者&#xff0c;推出了其创新的无掩模光刻机&#xff0c;这一设备在微电子制造、微纳加工、MEMS、LED、生物芯片等多个高科技领域展现出了其独特的价值和广泛的应用前景。 技术革…

用SwitchHosts模拟本地域名解析访问

一.用SwitchHosts模拟本地域名解析访问 1.下载地址 https://download.csdn.net/download/jinhuding/89313168 2.使用截图

C#【进阶】泛型

1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…

【MATLAB源码-第50期】基于simulink的BPSK调制解调仿真,输出误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. Bernoulli Binary: 这个模块生成伯努利二进制随机数&#xff0c;即0或1。这些数字表示要传输的原始数字信息。 2. Unipolar to Bipolar Converter: 此模块将伯努利二进制数据从0和1转换为-1和1&#xff0c;这是BPSK调制的…

【CSS】认识CSS选择器及各选择器对应的用法

目录 一、什么是CSS&#xff1f; 二、CSS 选择器 1. 标签选择器 2. 类选择器 3. ID选择器 4. 通配符选择器 5. 复合选择器 一、什么是CSS&#xff1f; CSS(Cascading Style Sheet)&#xff0c;层叠样式表。它与 HTML&#xff08;超文本标记语言&#xff09;一起使用&am…

手机号码的正则表达式

手机号码的正则表达式会根据不同的国家/地区有所不同&#xff0c;因为每个国家/地区都有自己特定的手机号码格式。但是&#xff0c;我可以为你提供一个通用的正则表达式模板&#xff0c;并给出一些具体国家/地区的例子。 通用模板 一个基本的手机号码正则表达式模板可能如下所…

Nginx 中限制访问速度的技术指南

在网络服务中&#xff0c;为了防止恶意用户或自动化脚本对网站资源进行滥用&#xff0c;限制访问速度成为一种常见且必要的技术。使用 Nginx&#xff0c;你可以有效地控制客户端的请求速率&#xff0c;从而保护网站不受过度请求的影响。本博客将详细讨论如何在 Nginx 中实施访问…