首页 生活 正文
sqlparameter(ASP.NET 中 SqlParameter是什么?具体怎么用?)

来源:网友提问 浏览数:6700 关注:281人

最佳回答:

大家好,近很多小伙伴想了解sqlparameter,下面是小编整理的与sqlparameter相关的内容分享给大家,一起来看看吧。

本文目录一览:

SqlParameter[] param;是什么意思思!

sqlparameter[] 这东西 是防止sql注入的 也就是说 sql后面 加的条件语句中所满足的条辩旅散件 在显示的时候是个隐藏的变量 而不会出现值下携氏面对这个方法进行引用 注意上述方法是调用存储过程 如果 想直接sql语句 可以注释掉方法中的sda.SelectCommand.CommandType =CommandType.Text;部分下面写一下调用过程的例子

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data.SqlClient;

using System.Data;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

nd();

}

public void nd()

{

sql eper sql =new sql eper();

string str ="镇凯select * from t esis w ere qkid=@qkid";

SqlParameter[] sqlpa=new SqlParameter[]{new SqlParameter("@qkid", SqlDbType.Int)};

sqlpa[0].Value= "1";

DataSet myds=sql.ExecuteDataSet(str, sqlpa);

Gridview1.DataSource = myds;

Gridview1.DataBind();

}

}

这样显示sql语句的时候条件的值 就不是1

而是变量@qkid

c#中SqlParameter用法

C# 中SqlParameter类的使用方法小结

在c#中执行sql语句时传递参数的小经验 1、直接写入法: 例如: int Id =1; string 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.VarC ar,16); para.Value=Name; com.Parameters.Add(para); ...然后就可以执行数据库 作了。

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

或者用数组

SqlParameterCollection 仅接受非空的 SqlParameter 类型对象,不接受 String 对象

SqlParameterCollection的Add方法有4个重载方法,你可以使用其他轿皮早重载方闭雀法。

还有一个AddWit Value方法,你可以直接添加参数握茄名与参数值。例如:

ST_mycommand.Parameters.AddWit Value("name", name);

sqlparameter(ASP.NET 中 SqlParameter是什么?具体怎么用?)

ASP.NET 中 SqlParameter是什么?具体怎么用?

SqlParameter用法

关于Sql注入的基本概念,相信不需多说,大家都清楚,经典的注入语句是' or 1=1--

单引号而截断字符串,“or 1=1”的永真式的出逗肢现使得表的一些信息被 露出来,如果sql语句是select * from 的话,可能你整个表的信息都会被读取到,更严重的是,如果**使用都使用drop命令,那么可能你的整个数据库得全线崩溃。

当然,现在重点不是讲sql注入的害处,而是说说如何大限度的避免注入问题。

sql注入的存在在大危害,是sql的执行语句没有和控制语句分开,我们想要select一些东西,但用户可能拼出' or 1=1甚至再加上delete/update/drop,后来是属于控制语句了,所以要避免sql的注入,就必须把查询语句与控制语句分开。

SqlParameter给我们提供了一个很好的类,有了它,我们可以不现拼接字符串,也可以不再担心单引号带来的惨剧,因为,这一切会有人来为我们完成的。

简单的给个示例

传统的查询语句的sql可能为

string sql="select * from users w ere user_id='"+Request.QueryString["uid"]+"'";

很显然,我们在缺指孝这里拼接了字符串,这就给sql注入留下了可乘之机。

现在,我们要改写这样的语句,使用SqlParameter来做

SqlCommand SqlCmd = new SqlCommand(sql, SqlConn);

SqlParameter _userid = new SqlParameter("uid", SqlDbType.Int);

_userid.Value = Request.QueryString["u_id"];

SqlCmd.Parameters.Add(_userid);

这样,我们可以保证外接参数能被正确的转换,单引号这些危险的字符也会转义了,不会再对库造成威胁。

当然,这仅是一个示例而已,在真实的情况下,可能你还要对 Request.QueryString["u_id"]进行必要的检测与分析,这样才安全

所以,使用参数化的sql语句,是一种很好的做法

Dim sql As StringBuilder = New StringBuilder()

sql.Append("")

sql.Append("SELECT * FROM test")

sql.Append(" WHERE a= @p1 ")

Dim command As SqlCommand = dac.CreateCommand(sql.ToString()) 'dac为自己写的类

Dim param As SqlParameter = New SqlParameter()

param .ParameterName = "@p1"

param .SqlDbType = SqlDbType.NVarC ar

param .Value = b 'b为该函数的参数(ByVal b as String)

command .Parameters.Add(param)

Dim reader As SqlDataReader = command.ExecuteReader()

SqlParameter 构造函数

SqlParameter 构造函数 (String, SqlDbType, Int32, ParameterDirection, Byte, Byte, String, DataRowVersion, Boolean, Object, String, String, String)

初始化 SqlParameter 类的一个新实例,该类使用参数名、参数的类型、参数的长度、方向、精度、小数位数、源列名称、DataRowVersion 值之一、用于源列映射的布尔值、SqlParameter 的值、伏稿此 XML 实例的架构**所在的数据库的名称、此 XML 实例的架构**所在的关系架构以及此参数的架构**的名称。

命名空间: System.Data.SqlClient

程序集: System.Data(在 system.data.dll 中)

C#

public SqlParameter (

string parameterName,

SqlDbType dbType,

int size,

ParameterDirection direction,

byte precision,

byte scale,

string sourceColumn,

DataRowVersion sourceVersion,

bool sourceColumnNullMapping,

Object value,

string xmlSc emaCollectionDatabase,

string xmlSc emaCollectionOwningSc ema,

string xmlSc emaCollectionName

)

参数

parameterName

要映射的参数的名称。

dbType

SqlDbType 值之一。

size

参数的长度。

direction

ParameterDirection 值之一。

precision

要将 Value 解析为的小数点左右两侧的总位数。

scale

要将 Value 解析为的总小数位数。

sourceColumn

源列的名称。

sourceVersion

DataRowVersion 值之一。

sourceColumnNullMapping

如果源列可为空,则为 true;如果不可为空,则为 false。

value

一个 Object,它是 SqlParameter 的值。

xmlSc emaCollectionDatabase

此 XML 实例的架构**所在的数据库的名称。

xmlSc emaCollectionOwningSc ema

包含此 XML 实例的架构**的关系架构。

xmlSc emaCollectionName

此参数的架构**的名称。

备注

如果未在 size 和 precision 参数中显式设置 Size 和 Precision,则从 dbType 参数的值推断出它们。

SqlParameter 类

表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。无法继承此类。

有关此类型所有成员的列表,请参阅 SqlParameter 成员。

System.Object

System.Mars alByRefObject

System.Data.SqlClient.SqlParameter

[Visual Basic]

NotIn eritable Public Class SqlParameter

In erits Mars alByRefObject

Implements IDbDataParameter, IDataParameter, ICloneable

[C#]

public sealed class SqlParameter : Mars alByRefObject,

IDbDataParameter, IDataParameter, ICloneable

[C++]

public __gc __sealed class SqlParameter : public

Mars alByRefObject, IDbDataParameter, IDataParameter, ICloneable

[JScript]

public class SqlParameter extends Mars alByRefObject implements

IDbDataParameter, IDataParameter, ICloneable

线程安全

此类型的所有公共静态(Visual Basic 中为 S ared)成员是线程安全的。但不保证任何实例成员是线程安全的。

备注

参数名称不区分大小写。

示例

[Visual Basic, C#, C++] 下面的示例通过 SqlDataAdapter 中的 SqlParameterCollection **创建 SqlParameter 的多个实例。这些参数用于从数据源中选择数据并将数据放在 DataSet 中。此示例假定已经用适当的架构、命令和连接创建了 DataSet 和 SqlDataAdapter。

[Visual Basic]

Public Sub AddSqlParameters()

' ...

' create myDataSet and myDataAdapter

' ...

myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", SqlDbType.VarC ar, 80).Value = "toasters"

myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", SqlDbType.Int).Value = 239

myDataAdapter.Fill(myDataSet)

End Sub 'AddSqlParameters

[C#]

public void AddSqlParameters()

{

// ...

// create myDataSet and myDataAdapter

// ...

myDataAdapter.SelectCommand.Parameters.Add("@CategoryName", SqlDbType.VarC ar, 80).Value = "toasters";

myDataAdapter.SelectCommand.Parameters.Add("@SerialNum", SqlDbType.Int).Value = 239;

myDataAdapter.Fill(myDataSet);

}

[C++]

public:

void AddSqlParameters()

{

// ...

// create myDataSet and myDataAdapter

// ...

myDataAdapter-SelectCommand-Parameters-Add(S"@CategoryName", SqlDbType::VarC ar, 80)-Value = S"toasters";

myDataAdapter-SelectCommand-Parameters-Add(S"@SerialNum", SqlDbType::Int)-Value = __box(239);

myDataAdapter-Fill(myDataSet);

}

[JScript] 没有可用于 JScript 的示例。若要查看 Visual Basic、C# 或 C++ 示例,请单击页左上角的“语言筛选器”按钮 。

要求

命名空间: System.Data.SqlClient

平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列, .NET Framework 精简版

程序集: System.Data (在 System.Data.dll 中)

使用SqlParameter

SqlParameter[] p =

{

SqlHelper.MakeInParam("@EntryID",SqlDbType.Int,4,ev.EntryID),

SqlHelper.MakeInParam("@BlogID",SqlDbType.Int,4,ev.BlogID),

SqlHelper.MakeInParam("@URL",SqlDbType.NVarC ar,255,DataHelper.C eckNull(ev.ReferralUrl)),

SqlHelper.MakeInParam("@IsWeb",SqlDbType.Bit,1,ev.PageViewType)

};

SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcedure,"blog_TrackEntry",p);

答疑:SqlParameter赋值之后怎么添加值

用SqlCommand我知道用add

但我想问的是 SqlParameter

例如

SqlParameter parm = new SqlParameter(PARM_ORDER_ID, SqlDbType.Int);

parm.Value = orderId;

之后能不能再改parm添加一个值

因为我写了个方法是传递SqlParameter类型的参数

但有时要做些判断

SqlParameter parm = new SqlParameter(PARM_ORDER_ID, SqlDbType.Int);

parm.Value = orderId;

if(...)

{

//添加一个参数

}

ExecuteReader(parm,.....);

请问应该怎么做呢

佳答案 int IArticle.Insert(ArticleInfo article)

{

//如果对象存在

if (article.ID != -1)

return -1;

else

article.ID = TableHelper.GetSequence(SQLHelper.ConnectionString, "Article", "ID");

//统计执行成功的数量

int successCount = 0;

string SQL_THIS = SQL_INSERT_ARTICLE;

SqlParameter[] paras = GetParas();

paras[0].Value = article.ID;

paras[1].Value = article.Title;

paras[2].Value = article.DateAdded;

paras[3].Value = article.Text;

paras[4].Value = article.SourceUrl;

paras[5].Value = article.PostType;

paras[6].Value = article.Aut or;

paras[7].Value = article.Email;

paras[8].Value = article.SourceName;

paras[9].Value = article.BlogID;

paras[10].Value = article.CategoryID;

paras[11].Value = article.Summary;

paras[12].Value = article.IsBySummary;

paras[13].Value = article.DateUpdated;

paras[14].Value = article.TitleUrl;

paras[15].Value = article.FeedBackCount;

paras[16].Value = article.PostConfig;

paras[17].Value = article.EntryName;

paras[18].Value = article.KeyWord;

SqlConnection conn = new SqlConnection(SQLHelper.ConnectionString);

successCount = SQLHelper.ExecuteNonQuery(conn, CommandType.Text, SQL_THIS, paras);

return successCount;

}

以上就是sqlparameter的介绍,希望能对大家有所帮助。

获赞:650

收藏:31

回答时间:2024-05-21 02:35:46

  •  标签:  

原文链接:http://www.ahhrhs.com/258819/

=========================================

特别声明:以上内容来源于网友投稿,编辑整理发布,如有不妥之处,请与我方联系删除处理。

今日更新
推荐阅读