找回密码
 立即注册
首页 业界区 业界 ADO.NET中SQL绑定变量方式总结

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

赖琳芳 2025-6-4 20:34:18
最近在项目上遇到几个问题,关于ADO.NET中SQL绑定变量
总结一下,分享给大家。
1. 使用 SqlParameter(推荐方式,防止 SQL 注入)

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

  • 防止 SQL 注入攻击。
  • 支持各种数据类型,避免 SQL 解析器重新编译。
  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. class Program
  5. {
  6.     static void Main()
  7.     {
  8.         string connectionString = "your_connection_string";
  9.         string query = "SELECT * FROM Users WHERE Username = @Username";
  10.         using (SqlConnection conn = new SqlConnection(connectionString))
  11.         using (SqlCommand cmd = new SqlCommand(query, conn))
  12.         {
  13.             cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar) { Value = "test_user" });
  14.             conn.Open();
  15.             using (SqlDataReader reader = cmd.ExecuteReader())
  16.             {
  17.                 while (reader.Read())
  18.                 {
  19.                     Console.WriteLine(reader["Username"]);
  20.                 }
  21.             }
  22.         }
  23.     }
  24. }
复制代码
2. 使用 AddWithValue 方法

如果不需要显式指定参数类型,可以用 AddWithValue 直接传值:
cmd.Parameters.AddWithValue("@Username", "test_user");
需要注意以下2个问题:

  • AddWithValue 可能导致隐式转换,影响性能(比如 int 传 nvarchar)。
  • 适用于简单情况,但不推荐用于复杂查询。
3. 存储过程(Stored Procedure)+ 绑定变量

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

  • 提高 SQL 复用性和执行效率(缓存执行计划)。
  • 更安全,避免 SQL 注入。
SQL Server 端(创建存储过程):
  1. CREATE PROCEDURE GetUserByUsername
  2.     @Username NVARCHAR(50)
  3. AS
  4. BEGIN
  5.     SELECT * FROM Users WHERE Username = @Username
  6. END
复制代码
C#调用代码
  1. cmd.CommandType = CommandType.StoredProcedure;
  2. cmd.CommandText = "GetUserByUsername";
  3. cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar) { Value = "test_user" });
复制代码
4. 批量绑定变量(Table-Valued Parameter,TVP)

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

  • 适用于批量查询或批量插入,提高性能。
  • 避免循环执行 SQL 语句的开销。
SQL Server 端(创建 TVP 类型):
  1. CREATE TYPE UserTableType AS TABLE
  2. (
  3.     UserId INT
  4. )
复制代码
C# 代码(传递多个 UserId):
  1. DataTable userTable = new DataTable();
  2. userTable.Columns.Add("UserId", typeof(int));
  3. userTable.Rows.Add(1);
  4. userTable.Rows.Add(2);
  5. using (SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE UserId IN (SELECT UserId FROM @UserTable)", conn))
  6. {
  7.     cmd.Parameters.Add(new SqlParameter("@UserTable", SqlDbType.Structured) { TypeName = "UserTableType", Value = userTable });
  8. }
复制代码
以上是C# ADO.NET 绑定变量的几种常见模式和示例代码。
 
周国庆
2025/3/16

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册