C#中执行SQL的几种方法讲解

阿橙
阿橙
发布时间:2026-10-16 | 6人浏览过
原创

在C#开发中,高效且安全地执行SQL语句是数据库交互的核心环节。本文针对SQL Server和Oracle两种主流数据库,分别介绍了基于自定义工具的查询与更新操作方法。通过使用SqlParameter和占位符参数,确保数据交互的安全性并避免SQL注入风险。

准备工作:初始化数据库工具

在执行具体的SQL之前,通常需要先实例化数据库连接或操作工具类。针对不同数据库,C#通常使用特定的命名空间或第三方封装库。以下示例展示了如何建立基础的工具引用:

第1步:配置不同数据库的连接对象

目的:为后续执行SQL语句准备上下文环境。

入口/动作:在类的成员变量中声明并初始化对应的数据库工具实例。根据目标数据库类型,调用构造函数传入客户端信息和数据库名称。

private InfoLightDBTools dbTools;       //#ORACLE#
this.dbTools = new InfoLightDBTools(clientInfo, dbName);

private InfoLightDBTXTools dbTXTools;  //#ORACLE# 要结合事务处理使用:BeginTransaction(),Commit(),Rollback(),EndTransaction()
this.dbTXTools = new InfoLightDBTXTools(clientInfo, dbName);

private InfoLightMSTools mdbtool;    //#SQL SERVER#
  • 注意事项:如果涉及事务操作,需选用支持事务的工具类(如InfoLightDBTXTools),并注意其提供的生命周期管理方法。

查询操作:获取数据集

使用ExecuteQueryDS等方法执行SELECT语句时,核心在于构建正确的SQL模板并绑定参数。

第2步:在SQL Server中使用SqlCommand风格执行查询

目的:从SQL Server数据库提取数据并返回DataTable。

入口/动作:

  1. 定义SQL:使用@符号作为参数前缀,例如@LINENAME。
  2. 创建参数列表:实例化SqlParameter对象,指定名称、类型(如SqlDbType.VarChar)及长度。
  3. 赋值与添加:将实际变量值赋予参数,并加入列表。
  4. 执行与解析:调用工具类的执行方法,判断状态后转换结果集。
public DataTable GetManPowerData(string vLineName, string vShift)
{
    DataTable dt = new DataTable();
    ExecutionResult exeRes = new ExecutionResult();
    List<SqlParameter> mParams;
    SqlParameter mLine_NameParam, mDNSParam;
    
    // 定义带有参数占位符的SQL语句
    string sql = @"select *
  from manpower
 where lineid = (select ID
                   from lines
                  where line = @LINENAME
                    AND (SMTCS IS NULL OR SMTCS = 'C'))
   and dns = @dns
 order by time1_start
";

    // 构建参数集合
    mParams = new List<SqlParameter>();
    mLine_NameParam = new SqlParameter("@LINENAME", SqlDbType.VarChar, 20);
    mLine_NameParam.Value = vLineName;
    mParams.Add(mLine_NameParam);

    mDNSParam = new SqlParameter("@dns", SqlDbType.VarChar, 20);
    mDNSParam.Value = 0; // 示例赋值
    mParams.Add(mDNSParam);

    // 执行查询
    exeRes = this.rMSDBTools.ExecuteQueryDS(sql, mParams);
    
    // 检查结果并返回
    if (exeRes.Status)
        dt = ((DataSet)exeRes.Anything).Tables[0];

    return dt;
}

第3步:在Oracle中使用冒号参数风格执行查询

目的:兼容Oracle数据库的参数解析机制(使用:前缀)。

入口/动作:

  1. 定义SQL:使用:line_name格式。
  2. 参数封装:利用DBParameter工具类添加参数,指定OracleType。
  3. 执行:调用mdbtools.ExecuteQueryDS。
public DataTable getModel(string line_name)
{
    DataTable dt = new DataTable();
    ExecutionResult exeRes = new ExecutionResult();
    DBParameter dbParam = new DBParameter();
    
    string sql = @"   SELECT DISTINCT T.MODEL_NAME
    FROM sfism4.R_LINE_MODEL_STATUS_T t
   WHERE T.LINE_NAME = :line_name
";
            
    dbParam.Clear();
    dbParam.Add("line_name", OracleType.VarChar, line_name);
    
    exeRes = this.mdbtools.ExecuteQueryDS(sql, dbParam.GetParameters());
    if (exeRes.Status)
        dt = ((DataSet)exeRes.Anything).Tables[0];
    return dt;
}

更新操作:执行修改或删除

对于DELETE、INSERT或UPDATE操作,通常使用ExecuteUpdate方法。此类操作更需注意异常捕获。

第4步:执行带有多个条件的删除操作

目的:安全地执行批量删除或条件更新。

入口/动作:

  1. 清理旧参数:调用dbParam.Clear()确保状态干净。
  2. 绑定多参数:依次添加所有用于WHERE条件的参数。
  3. 异常处理:使用try-catch块包裹执行过程,以便记录失败原因。
public ExecutionResult DoDelete(string sap_plant, string wip_sn, string up_data1)
{
    ExecutionResult exeRes = new ExecutionResult();
    exeRes.Message = "";
    DBParameter dbParam = new DBParameter();
    
    string sql = @"  DELETE SFISM4.U_UP2INTERFACE_TODOLIST_T A
 WHERE A.CUST_NO = :CUST_NO
   AND A.TYPE = 'IMS_STOP'
   AND A.JOB_STATUS = 'OK'
   AND A.WIP_SN = :WIP_SN
   AND A.UP_DATA1 = :UP_DATA1
";

    #region Param
    dbParam.Clear();
    dbParam.Add("CUST_NO", OracleType.NVarChar, sap_plant);
    dbParam.Add("WIP_SN", OracleType.NVarChar, wip_sn);
    dbParam.Add("UP_DATA1", OracleType.NVarChar, up_data1);
    #endregion
    try
    {
        // 执行更新操作
        exeRes = this.mdbtools.ExecuteUpdate(sql, dbParam.GetParameters());
    }
    catch (Exception ex)
    {
        exeRes.Message += ex.Message;
        exeRes.Status = false;
    }
    return exeRes;
}

以上就是C#中执行SQL的几种常用方法的详细内容,更多关于C#数据库操作的技巧资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表