C#中执行SQL的几种方法讲解
在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。
入口/动作:
- 定义SQL:使用
@符号作为参数前缀,例如@LINENAME。 - 创建参数列表:实例化
SqlParameter对象,指定名称、类型(如SqlDbType.VarChar)及长度。 - 赋值与添加:将实际变量值赋予参数,并加入列表。
- 执行与解析:调用工具类的执行方法,判断状态后转换结果集。
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数据库的参数解析机制(使用:前缀)。
入口/动作:
- 定义SQL:使用
:line_name格式。 - 参数封装:利用
DBParameter工具类添加参数,指定OracleType。 - 执行:调用
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步:执行带有多个条件的删除操作
目的:安全地执行批量删除或条件更新。
入口/动作:
- 清理旧参数:调用
dbParam.Clear()确保状态干净。 - 绑定多参数:依次添加所有用于WHERE条件的参数。
- 异常处理:使用
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#数据库操作的技巧资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









