LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

ADO.NET中SQL绑定变量方式总结

freeflydom
2025年3月17日 9:27 本文热度 342

最近在项目上遇到几个问题,关于ADO.NET中SQL绑定变量

总结一下,分享给大家。

1. 使用 SqlParameter(推荐方式,防止 SQL 注入)

ADO.NET 提供 SqlParameter 来绑定变量,从而提高安全性和性能。

  • 防止 SQL 注入攻击。
  • 支持各种数据类型,避免 SQL 解析器重新编译。
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
    static void Main()
    {
        string connectionString = "your_connection_string";
        string query = "SELECT * FROM Users WHERE Username = @Username";
        using (SqlConnection conn = new SqlConnection(connectionString))
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar) { Value = "test_user" });
            conn.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine(reader["Username"]);
                }
            }
        }
    }
}

2. 使用 AddWithValue 方法

如果不需要显式指定参数类型,可以用 AddWithValue 直接传值:

cmd.Parameters.AddWithValue("@Username", "test_user");

需要注意以下2个问题:

  • AddWithValue 可能导致隐式转换,影响性能(比如 int 传 nvarchar)。
  • 适用于简单情况,但不推荐用于复杂查询。

3. 存储过程(Stored Procedure)+ 绑定变量

绑定变量也可以用于存储过程,提高安全性和代码复用性。

  • 提高 SQL 复用性和执行效率(缓存执行计划)。
  • 更安全,避免 SQL 注入。

SQL Server 端(创建存储过程):

CREATE PROCEDURE GetUserByUsername
    @Username NVARCHAR(50)
AS
BEGIN
    SELECT * FROM Users WHERE Username = @Username
END

C#调用代码

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetUserByUsername";
cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar) { Value = "test_user" });

4. 批量绑定变量(Table-Valued Parameter,TVP)

如果需要传递多个值给 SQL 查询,可以使用 TVP 绑定变量,提高批量操作的性能。

  • 适用于批量查询或批量插入,提高性能。
  • 避免循环执行 SQL 语句的开销。

SQL Server 端(创建 TVP 类型):

CREATE TYPE UserTableType AS TABLE 
(
    UserId INT
)

C# 代码(传递多个 UserId):

DataTable userTable = new DataTable();
userTable.Columns.Add("UserId", typeof(int));
userTable.Rows.Add(1);
userTable.Rows.Add(2);
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE UserId IN (SELECT UserId FROM @UserTable)", conn))
{
    cmd.Parameters.Add(new SqlParameter("@UserTable", SqlDbType.Structured) { TypeName = "UserTableType", Value = userTable });
}

以上是C# ADO.NET 绑定变量的几种常见模式和示例代码。

转自https://www.cnblogs.com/tianqing/p/18774515


该文章在 2025/3/17 9:27:33 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved