当前位置: 首页 > news >正文

低价高端网站设计瓦力工厂少儿编程加盟

低价高端网站设计,瓦力工厂少儿编程加盟,微营销app,免费行情软件网站下载视频在 C# 数据库编程中,SqlHelper类是简化 SQL Server 操作的重要工具,它封装了ADO.NET的底层细节,让开发者能更专注于业务逻辑。以下从方法原理、使用示例和实战技巧三个方面进行详细说明。 一、SqlHelper 核心方法原理与对比 SqlHelper的方法…

在 C# 数据库编程中,SqlHelper类是简化 SQL Server 操作的重要工具,它封装了ADO.NET的底层细节,让开发者能更专注于业务逻辑。以下从方法原理、使用示例和实战技巧三个方面进行详细说明。

一、SqlHelper 核心方法原理与对比

SqlHelper的方法围绕数据操作的不同需求设计,核心方法的对比和适用场景如下:

方法名功能描述返回值类型适用场景
ExecuteNonQuery执行增删改命令受影响的行数 (int)INSERT/UPDATE/DELETE、存储过程执行
ExecuteScalar执行查询,返回单值object统计 (COUNT)、最大值 (MAX) 等聚合查询
ExecuteReader高效读取大数据流SqlDataReader大量数据逐条处理(如导出)
ExecuteDataTable返回内存数据表DataTable小批量数据展示(如绑定 UI 控件)

二、完整 SqlHelper 类实现

以下是包含完整异常处理和资源管理的实现代码:

完整的SqlHelper类实现

配置文件配置(App.config/Web.config):

<configuration><connectionStrings><add name="MainDB" connectionString="Server=localhost;Database=DemoDB;Integrated Security=True;" providerName="System.Data.SqlClient" /></connectionStrings>
</configuration>

三、分场景使用示例

1. 基础 CRUD 操作(使用ExecuteNonQuery

新增数据

public bool AddCustomer(string name, string phone)
{string sql = "INSERT INTO Customers (Name, Phone, CreateTime) " +"VALUES (@Name, @Phone, GETDATE())";
​var parameters = new[] {new SqlParameter("@Name", SqlDbType.NVarChar, 50) { Value = name },new SqlParameter("@Phone", SqlDbType.VarChar, 20) { Value = phone }};
​try{int rows = SqlHelper.ExecuteNonQuery(CommandType.Text, sql, parameters);return rows > 0;}catch (Exception ex){Console.WriteLine($"新增失败: {ex.Message}");return false;}
}

更新数据

public bool UpdateCustomer(int id, string phone)
{string sql = "UPDATE Customers SET Phone = @Phone WHERE Id = @Id";
​var parameters = new[] {new SqlParameter("@Phone", phone),new SqlParameter("@Id", id)};
​return SqlHelper.ExecuteNonQuery(CommandType.Text, sql, parameters) > 0;
}
2. 聚合查询(使用ExecuteScalar
public decimal GetTotalSales(DateTime startDate, DateTime endDate)
{string sql = "SELECT SUM(Amount) FROM Orders " +"WHERE OrderDate BETWEEN @Start AND @End";
​var parameters = new[] {new SqlParameter("@Start", startDate),new SqlParameter("@End", endDate)};
​try{object result = SqlHelper.ExecuteScalar(CommandType.Text, sql, parameters);return result is DBNull ? 0 : Convert.ToDecimal(result);}catch (Exception ex){Console.WriteLine($"查询失败: {ex.Message}");return 0;}
}
3. 大数据读取(使用ExecuteReader
public void ExportLargeData()
{string sql = "SELECT Id, Name, Address FROM Customers WHERE RegisterDate < @Date";var parameter = new SqlParameter("@Date", new DateTime(2020, 1, 1));
​using (var reader = SqlHelper.ExecuteReader(CommandType.Text, sql, parameter)){while (reader.Read()){// 逐条处理数据(适合百万级数据)var id = reader.GetInt32(0);var name = reader.GetString(1);var address = reader.IsDBNull(2) ? "无地址" : reader.GetString(2);
​Console.WriteLine($"{id},{name},{address}");}}
}
4. 数据绑定(使用ExecuteDataTable
public DataTable GetProductList(string keyword)
{string sql = "SELECT Id, Name, Price, Stock FROM Products " +"WHERE Name LIKE @Keyword";
​var parameter = new SqlParameter("@Keyword", $"%{keyword}%");
​return SqlHelper.ExecuteDataTable(CommandType.Text, sql, parameter);
}
​
// 在WinForm中绑定到DataGridView
// dataGridView1.DataSource = GetProductList("手机");
5. 事务处理(多操作原子性)
public bool TransferStock(int fromWarehouse, int toWarehouse, int productId, int quantity)
{using (var conn = new SqlConnection(SqlHelper.ConnectionString)){conn.Open();var tran = conn.BeginTransaction();
​try{// 步骤1:从仓库A扣减库存var sql1 = "UPDATE WarehouseStock SET Qty = Qty - @Qty " +"WHERE WarehouseId = @From AND ProductId = @Product";var p1 = new[] {new SqlParameter("@Qty", quantity),new SqlParameter("@From", fromWarehouse),new SqlParameter("@Product", productId)};int rows1 = SqlHelper.ExecuteNonQuery(conn, tran, CommandType.Text, sql1, p1);if (rows1 == 0) throw new Exception("源仓库库存不足");
​// 步骤2:向仓库B增加库存var sql2 = "UPDATE WarehouseStock SET Qty = Qty + @Qty " +"WHERE WarehouseId = @To AND ProductId = @Product";var p2 = new[] {new SqlParameter("@Qty", quantity),new SqlParameter("@To", toWarehouse),new SqlParameter("@Product", productId)};SqlHelper.ExecuteNonQuery(conn, tran, CommandType.Text, sql2, p2);
​// 步骤3:记录库存转移日志var sql3 = "INSERT INTO StockLogs (ProductId, FromWh, ToWh, Qty) " +"VALUES (@Product, @From, @To, @Qty)";var p3 = new[] {new SqlParameter("@Product", productId),new SqlParameter("@From", fromWarehouse),new SqlParameter("@To", toWarehouse),new SqlParameter("@Qty", quantity)};SqlHelper.ExecuteNonQuery(conn, tran, CommandType.Text, sql3, p3);
​tran.Commit();return true;}catch (Exception ex){tran.Rollback();Console.WriteLine($"转移失败: {ex.Message}");return false;}}
}

四、实战技巧与注意事项

  1. 参数处理最佳实践

    • 始终指定SqlDbType和长度(如SqlDbType.NVarChar, 50),避免数据库隐式转换

    • 处理null值时,使用DBNull.Value而非null(如param.Value = value ?? DBNull.Value

  2. 性能优化

    • 大量数据读取优先用ExecuteReader(内存占用低)

    • 频繁操作同一连接时,手动管理连接而非每次创建(如事务场景)

  3. 安全性

    • 严禁拼接 SQL 字符串(如"WHERE Name = '" + name + "'"),必须用参数化查询防注入

    • 生产环境加密连接字符串,避免明文存储账号密码

  4. 异常处理

    • 捕获SqlException处理数据库特定错误(如主键冲突、死锁)

    • 记录详细日志(包含 SQL 语句和参数),便于排查问题

通过上述内容,你可以全面掌握SqlHelper的使用,在实际开发中根据场景选择合适的方法,既能简化代码又能保证安全性和性能。

http://www.dtcms.com/a/425402.html

相关文章:

  • 网站开发 写文档制作网站软件教程
  • 外包建设网站数据中台建设
  • 网站建设中间件收费专门做选择题的网站
  • 简述网站开发的过程长沙网站建设找哪家
  • WordPress网站生成小程序天津网站建设网络公司
  • 手机壁纸网站源码seo专家招聘
  • 顺德门户网站建设公司沛县网站制作
  • 网站建设一条龙包括哪些服务西安建筑科技大学就业信息网
  • 网站首页的模块布局网站运营与建设
  • 哪些网站可以做驾考试题cms做网站
  • 电子商务网站建设合同标准范文安卓手机app开发工具软件
  • 小程序联盟商家版福州网seo
  • 软件园做网站杨凌企业网站开发
  • 做网站赚钱的点在哪里成都建站优化公司
  • 贵州软件开发 网站开发营销型网站制作流程
  • 做网站 收费网页类网站
  • wordpress子站点打不开商丘网站建设费用
  • 创业网站建设规划书宣传片拍摄思路怎么写
  • 第一次做网站程序开发公司名大全
  • 镇江建设银行网站成都 建设网站
  • 京东网站怎么做凡科建站源码
  • 杭州网站运营中国室内设计
  • 手机参数对比的网站中小型网站建设平台
  • 行业网站建设详解网站开发 流程图
  • 企业公示信息查询系统吉林小红书seo排名
  • seo建站推广机构组织网站建设
  • 网站建站要求建筑招聘最好的网站
  • 苏州网站网络推广潍坊外贸网站优化
  • 网站设计制作视频做网站需要先买域名吗
  • 景区网站怎么做郑州市招投标信息网