DB类的学习

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 语句后,你不会得到一个可以逐行读取的数据集。相反,你可能会得到一个表示受影响的行数的整数,或者只是一个表示命令是否成功执行的确认。

相关推荐

  1. DB学习

    2024-05-16 06:30:03       12 阅读
  2. 关于DFS学习

    2024-05-16 06:30:03       13 阅读
  3. Python 学习

    2024-05-16 06:30:03       15 阅读
  4. 打造一套属于自己php开发框架(一)封装Db

    2024-05-16 06:30:03       13 阅读
  5. 内部学习2

    2024-05-16 06:30:03       39 阅读
  6. 算法学习

    2024-05-16 06:30:03       11 阅读
  7. TS学习-继承

    2024-05-16 06:30:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 06:30:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 06:30:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 06:30:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 06:30:03       18 阅读

热门阅读

  1. 从HTTP迁移到HTTPS:一篇全面的测试方案设计指南

    2024-05-16 06:30:03       10 阅读
  2. MyBatis的一二级缓存区别

    2024-05-16 06:30:03       13 阅读
  3. http 和 https 的区别及原理解析

    2024-05-16 06:30:03       14 阅读
  4. 阅读笔记——《代码整洁之道》ch2

    2024-05-16 06:30:03       9 阅读
  5. ifconfig 无输出

    2024-05-16 06:30:03       11 阅读
  6. pthread_setname_np 线程设置名字 c++

    2024-05-16 06:30:03       13 阅读
  7. 百度:文心大模型日均处理Tokens文本已达2490亿

    2024-05-16 06:30:03       11 阅读
  8. PDF 生成目录和页码 点击跳转(新)

    2024-05-16 06:30:03       12 阅读
  9. Azure SQL server database 权限管理-赋予权限

    2024-05-16 06:30:03       17 阅读
  10. STM32多个外部中断可能共享同一个中断向量

    2024-05-16 06:30:03       10 阅读