SqlParameter带参数的增删改查语句,可以防止注入.有时候写sql语句的时候会根据方法传进来的参数来判断sql语句中where条件的参数.
一般方法
DAL层方法
代码如下:
public
UserInfo
GetAll(UserInfo
a)
{
string
strSql
=
"select
id,name,code,password
from
[tb].[dbo].[User]
where
1=1"
strSql
+=
"
and
[id]=@id"
strSql
+=
"
and
[name]=@name"
strSql
+=
"
and
[code]=@code"
strSql
+=
"
and
[password]=@password"
SqlParameter[]
parameters
=
{
new
SqlParameter("@id",
a.id)
new
SqlParameter("@name",
a.name)
new
SqlParameter("@code",
a.code),
new
SqlParameter("@password",
a.password)
}
SqlDataReader
reader
=
SqlHelper.ExecuteReader(strSql,
parameters)
UserInfo
hc
=
new
UserInfo()
while(reader.Read())
{
hc.id
=
reader.GetInt32(reader.GetOrdinal("id"))
hc.name
=
reader.GetString(reader.GetOrdinal("name"))
hc.code
=
reader.GetString(reader.GetOrdinal("code"))
hc.password
=
reader.GetString(reader.GetOrdinal("password"))
}
reader.Close()
return
hc
}
现在想根据集合UserInfo内属性来添加SqlParameter参数
方法如下
DAL层方法
代码如下:
public
UserInfo
GetALL(UserInfo
a)
{
string
strSql
=
"select
id,name,code,password
from
[tb].[dbo].[User]
where
1=1"
if
(a.id>0)
strSql
+=
"
and
[id]=@id"
if
(!string.IsNullOrEmpty(a.name))
strSql
+=
"
and
[name]=@name"
if
(!string.IsNullOrEmpty(a.code))
strSql
+=
"
and
[code]=@code"
if
(!string.IsNullOrEmpty(a.password))
strSql
+=
"
and
[password]=@password"
List<SqlParameter>
parametertemp
=
new
List<SqlParameter>()
if
(a.id
>
0)
parametertemp.Add(new
SqlParameter("@id",
a.id))
if
(!string.IsNullOrEmpty(a.name))
parametertemp.Add(new
SqlParameter("@name",
a.name))
if
(!string.IsNullOrEmpty(a.code))
parametertemp.Add(new
SqlParameter("@code",
a.code))
if
(!string.IsNullOrEmpty(a.password))
parametertemp.Add(new
SqlParameter("@password",
a.password))
SqlParameter[]
parameters
=
parametertemp.ToArray()//ToArray()方法将
List<T>
的元素复制到新数组中。
SqlDataReader
reader
=
SqlHelper.ExecuteReader(strSql,
parameters)
UserInfo
hc
=
new
UserInfo()
while
(reader.Read())
{
hc.id
=
reader.GetInt32(reader.GetOrdinal("id"))
hc.name
=
reader.GetString(reader.GetOrdinal("name"))
hc.code
=
reader.GetString(reader.GetOrdinal("code"))
hc.password
=
reader.GetString(reader.GetOrdinal("password"))
}
reader.Close()
return
hc
}
DBUtility层SqlHelper
代码如下:
public
SqlDataReader
ExecuteReader(string
query,
params
SqlParameter[]
parameters)
{
SqlConnString
=
GetConnect2()
SqlConnString.Open()
SqlCommand
SqlCmd
=
new
SqlCommand()
SqlCmd.Connection
=
SqlConnString
SqlCmd.CommandText
=
query
//SqlCmd.Parameters.AddRange(parameters)//AddRange()不能传空参数组
//params
的意思就是允许传空参数组
foreach
(SqlParameter
item
in
parameters)
{
SqlCmd.Parameters.Add(item)
}
SqlDataReader
dr
try
{
dr
=
SqlCmd.ExecuteReader(CommandBehavior.CloseConnection)
return
dr
}
catch
(Exception
ee)
{
SqlConnString.Close()
throw
ee
}
}
函数重载一般都是这样实现的:function1(int x,int y)
{
...
}
function1(int x)
{
function1(x,0)
}
function1()
{
function1(0,0)
}
调用参数少的省事,但多一次函数调用,多压一次栈.
一般要不是在大型的循环里没人计较这个的
不过养成对性能时刻警惕的习惯还是好的
C# 中SqlParameter类的使用方法小结在c#中执行sql语句时传递参数的小经验 1、直接写入法: 例如: int Id =1string Name="lui"cmd.CommandText="insert into TUserLogin values("+Id+",'"+Name+"')" 因为Id是数值,所以在传递的时候只需要在sql字符串中用"+Id+"即可实现,而 Name是字符串,所以在传递的时候还需要在"+Name+"两边各加一个单引号(')来 实现 2、给命令对象添加参数法: 例如:int Id =1 string Name="lui" cmd.CommandText="insert into TUserLogin values(@Id,@Name)" //上条语句中直接在sql语句中写添加的参数名,不论参数类型都是如此. SqlParameter para=new SqlParameter("@Id",SqlDbType.int,4)//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同 para.Value=Id//给参数赋值 cmd.Parameters.Add(para)//必须把参数变量添加到命令对象中去。 //以下类似 para=new SqlParameter("@Name",SqlDbType.VarChar,16) para.Value=Name com.Parameters.Add(para) ...然后就可以执行数据库 *** 作了。
-----------------------------------
或者用数组
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)