首页 > 数据库 >C# 操作SQLServer数据库

C# 操作SQLServer数据库

时间:2024-07-21 21:56:07浏览次数:15  
标签:语句 cmdText using C# 数据库 SQLServer SQL SqlConnection conn

一、引入数据库连接System.Data.SqlClient和读取配置文件Configuration依赖

 

二、在配置文件App.config中加入SQLServer数据库连接字符

<!--SQLServer数据库连接配置-->
    <connectionStrings>
        <add name="SqlServerConnectionString"
             connectionString="Data Source=DESKTOP-C1F0DQP\SQLEXPRESS;Initial Catalog=HTH_PC_DATA;Persist Security Info=True;User ID=sa;Password=123"
             providerName="System.Data.SqlClient" />
    </connectionStrings>

 

三、编写数据库操作基础工具类

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace HTH_BatteryMonitorSystem
{
    /// <summary>
    /// 数据库操作类
    /// </summary>
    public static class SQLUtil
    {

        /// <summary>
        /// 连接字符串
        /// </summary>
        private static string strconn;

        static SQLUtil()
        {
            //读取配置文件
            strconn = ConfigurationManager.ConnectionStrings["SqlServerConnectionString"].ToString();
        }

        /// <summary>
        /// 执行增删改SQL语句,只返回受影响的行数
        /// </summary>
        /// <param name="cmdText">SQL语句</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string cmdText)
        {
            using (SqlConnection conn = new SqlConnection(strconn))
            {
                conn.Open();
                return ExecuteNonQuery(conn, cmdText);
            }
        }

        /// <summary>
        /// 执行增删改SQL语句
        /// </summary>
        /// <param name="conn">SqlConnection</param>
        /// <param name="cmdText">SQL语句<</param>
        /// <returns></returns>
        private static int ExecuteNonQuery(SqlConnection conn, string cmdText)
        {
            int res;
            using (SqlCommand cmd = new SqlCommand(cmdText, conn))
            {
                cmd.CommandType = CommandType.Text;
                res = cmd.ExecuteNonQuery();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
            return res;
        }

        /// <summary>
        /// 执行查询SQL语句
        /// </summary>
        /// <param name="cmdText">SQL语句</param>
        /// <returns></returns>
        public static DataTable ExecuteDataTable(string cmdText)
        {
            using (SqlConnection conn = new SqlConnection(strconn))
            {
                conn.Open();
                return ExecuteDataTable(conn, cmdText);
            }
        }

        /// <summary>
        /// 执行查询SQL语句
        /// </summary>
        /// <param name="conn">SqlConnection</param>
        /// <param name="cmdText">SQL语句</param>
        /// <returns></returns>
        private static DataTable ExecuteDataTable(SqlConnection conn, string cmdText)
        {
            DataTable dt = new DataTable();    
            using (SqlDataAdapter sda = new SqlDataAdapter(cmdText,conn))
            {
                sda.Fill(dt);
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
            return dt;
        }

        /// <summary>
        /// 执行查询SQL语句
        /// </summary>
        /// <param name="cmdText">SQL语句</param>
        /// <returns></returns>
        public static object[] ExecuteQuery(string cmdText)
        {
            using (SqlConnection conn = new SqlConnection(strconn))
            {
                conn.Open();
                return ExecuteQuery(conn, cmdText);
            }
        }

        /// <summary>
        /// 执行查询SQL语句
        /// </summary>
        /// <param name="conn">SqlConnection</param>
        /// <param name="cmdText">SQL语句</param>
        /// <returns></returns>
        private static object[] ExecuteQuery(SqlConnection conn, string cmdText)
        {
          
            using (SqlCommand cmd = new SqlCommand(cmdText, conn))
            {
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    //dt.Load(sdr);
                    //sdr.Close();
                    //sdr.Dispose();
                    //if (conn.State == ConnectionState.Open)
                    //{
                    //    conn.Close();
                    //    conn.Dispose();
                    //}
                    if (sdr.Read())
                    {
                        // 返回整行数据
                        object[] rowData = new object[sdr.FieldCount];
                        sdr.GetSqlValues(rowData);
                        return rowData;
                    }
                }
            }
            return null;
        }

    }


}

后续随着深入学习再会优化

标签:语句,cmdText,using,C#,数据库,SQLServer,SQL,SqlConnection,conn
From: https://www.cnblogs.com/zeussbook/p/18315026

相关文章

  • 阅读笔记《CCSP认证官方指南》第2版
    按需自助服务:允许客户自主扩展计算和存储,而不需要或很少需要提供商的介入或提前沟通。这项服务是实时生效的。入侵检测分析人员必须理解组织在做什么、为什么做、如何做以及在哪里做,以便更好地理解外部攻击的性质和强度,并相应地调整安全基线。云计算平台的标志性特性:弹性、简单......
  • npm私服 verdaccio 搭建
    1、什么是npm私服我们前端(web,nodejs)平常使用的各种包,什么vue,react,react-router,zustand等,都会从https://registry.npmjs.org/这个镜像源上download,当然我们国内开发为了download方便,快速down下来,下载包的时候会指定国内镜像源,比如淘宝镜像。像这些提供给全网使用的镜像服......
  • c++ 引用和指针
      c++引用和指针在C++中,引用和指针是两个非常重要的概念,它们有一些相似之处也有一些不同之处。相似之处:引用和指针都可以指向一个对象。引用一旦被初始化指向一个对象后,就不能再指向其他对象,而指针可以在任何时候指向其他对象。不同之处:引用在......
  • 快速完成VsCode C/C++开发环境配置
    前言本人在配置VsCodeC++开发环境时,查看了很多的博客,内容参差不齐,尤其是关于json文件的配置,绕的人头很晕,最终还是通过阅读官方文档,结合部分博客的指引,完成了环境的配置,在此记录本人的配置过程,希望能帮助到大家。事先声明,本文的内容大量引自VsCode官方的文章:https://code.visual......
  • Elastic Search基于Spring Boot实现复杂查询和对复杂查询结果的映射银行账户对象并获
    packagecom.alatus.search;importcom.alatus.search.config.MallElasticSearchConfig;importcom.alibaba.fastjson.JSON;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importlombok.ToString;importorg.elasticsearch.......
  • 封禁 NetBIOS Session Service 和 SMB 服务(特别是旧版本的SMB)可能是出于安全性考虑。
    封禁NetBIOSSessionService和SMB服务(特别是旧版本的SMB)可能是出于安全性考虑。这两种服务在过去的实现中存在一些安全漏洞和风险,特别是在现代网络环境中,这些风险可能会被利用来进行攻击或者未经授权的访问。下面是一些常见的安全考虑:中间人攻击:未加密的NetBIOS和旧版本......
  • Xcode应用开发:自定义图表的终极指南
    Xcode应用开发:自定义图表的终极指南在移动应用开发中,图表是一种展示数据的强大工具,它可以帮助用户直观地理解复杂信息。Xcode,作为苹果官方的集成开发环境(IDE),提供了丰富的工具和框架来创建自定义图表。本文将详细解释如何在Xcode中开发自定义图表,包括使用内置框架和第三方库......
  • OpenCV 遍历Mat,像素操作,使用TrackBar 调整图像的亮度和对比度 C++实现
    文章目录1.使用C++遍历Mat,完成颜色反转1.1常规遍历方式1.2迭代器遍历方式1.3指针访问方式遍历(最快)1.4不同遍历方式的时间对比2.图像像素操作,提高图像的亮度3.TrackBar进度条操作3.1使用TrackBar调整图像的亮度3.2使用TrackBar调整图像的对比度1.使用C++遍历M......
  • pytorch中MultiScaleRoIAlign及MultiScaleRoIPooling实现
    文章目录ROIpooling及ROIAlign原理介绍ROIPoolingROIAlign代码解析使用方式MultiScaleRoIOperation代码解析MultiScaleRoIPooling代码解析MultiScaleRoIAlign代码解析结果引用ROIpooling及ROIAlign原理介绍ROIPoolingRoIPooling用于将任意尺寸感兴趣区域......
  • 1.8TCP的3次握手和4次挥手
    1.8TCP的3次握手4次挥手TCP协议非常重要,这里把它的连接和释放整理一下。首先是三次握手:1、客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x。SYN是干什么用的?在链接的时候创建一个同步序号,当SYN=1同时ACK=0的时候,表明这是一个连接请求的报文段。......