asp.net SqlParameter如何根据条件有选择的添加参数

asp.net SqlParameter如何根据条件有选择的添加参数,第1张

有时候写sql语句的时候会根据方法传进来的参数来判断sql语句中where条件的参数,下面有个示例,大家可以参考下

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) ...然后就可以执行数据库 *** 作了。

-----------------------------------

或者用数组


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11390579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存