C#中使用SqlParameter是避免SQL注入攻击的重要手段之一,SqlParameter可以在传递参数的时候对参数值进行格式化和安全验证,保证代码的安全性和稳定性。下面将分别介绍SqlParameter的两种用法。
用法一:SqlParameter构造函数传参
SqlParameter
类构造函数可以通过直接传递参数的形式,将参数名和参数类型传递给SqlParameter
对象。示例如下:
string sql = "SELECT * FROM Users WHERE UserName = @UserName AND Age > @Age";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.Add(new SqlParameter("@UserName", SqlDbType.NVarChar, 50) { Value = "Tom" });
command.Parameters.Add(new SqlParameter("@Age", SqlDbType.Int) { Value = 18 });
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"{reader["UserName"]}, Age:{reader["Age"]}");
}
}
}
}
首先建立一个SqlCommand对象来执行查询,并将查询结果保存在SqlDataReader对象中,其中使用到了SqlParameter对象对参数进行了验证。
在此示例中,在SqlCommand对象查询语句的@UserName变量前加上了@符号,该符号是SqlCommand对象中参数名的前缀符,用于区分普通SQL语句中的变量名和参数名,其中SqlDbType.VarChar
表示该参数为字符串类型,第二个参数50
为该SqlParameter对象的长度,第三个参数Value是该SqlParameter对象的值。
用法二:SqlParameter的属性传参
在执行Command
的ExecuteXXX
方法前,可以将SqlParameter对象作为Command
的参数,并使用SqlParameter对象的属性对参数进行设置。示例如下:
string sql = "INSERT INTO Users(UserName, Age) VALUES (@UserName, @Age)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@UserName", SqlDbType.NVarChar, 50);
command.Parameters.Add("@Age", SqlDbType.Int);
command.Parameters["@UserName"].Value = "Tom";
command.Parameters["@Age"].Value = 18;
int rows = command.ExecuteNonQuery();
Console.WriteLine($"Inserted Rows: {rows}");
}
}
第一步、创建一个SqlCommand对象,该对象包含了插入语句,并定义了两个参数。
第二步、为SqlCommand对象添加SqlParameter对象,分别为@UserName
和@Age
。后面的SqlDbType、长度等属性都在添加时直接一并定义。
第三步、为SqlParameter对象赋值,并在SqlCommand对象执行ExecuteNonQuery方法时将SqlParameter对象传递为参数。
这种方法是SqlParameter的可空类型(Null)和默认值(DefaultValue)都能设置。通过SqlParameter的属性传参方式可以结合其他信息实现更多需求。
综上,在编写C#代码过程中,使用SqlParameter进行参数传递可以有效防止SQL注入攻击,在SqlCommand对象的查询语句和参数值中都采用SqlParameter对象时,SQL语句执行效率也有所提升,建议大家掌握SqlParameter的正确用法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 中用 Sqlparameter 的两种用法 - Python技术站