`
android_mylove
  • 浏览: 399422 次
社区版块
存档分类
最新评论

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.VarChar,16);

para.Value=Name;

com.Parameters.Add(para);

...然后就可以执行数据库操作了。

声明:本帖转自 http://www.knowsky.com/339188.html

在此对本帖原创作者,致以最诚挚的谢意!

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

SqlParameter用法

SqlParameter[] parameters = { new SqlParameter("@a", "a1"), new SqlParameter("@b", "b1") };

string strReturn = "";

StringBuilder strBulResult = new StringBuilder();

foreach (SqlParameter parameter in parameters)

{

strBulResult.Append(parameter.ParameterName);

strBulResult.Append(":");

strBulResult.Append(parameter.SqlValue);

strBulResult.Append("/n");

}

strReturn = strBulResult.ToString();

声明:本帖转自 http://hi.baidu.com/daxiongmao_adi/blog/item/d7ac6ccdd75348540eb34553.html

在此对本帖原创作者,致以最诚挚的谢意!

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

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 where 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.NVarChar

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 xmlSchemaCollectionDatabase,

string xmlSchemaCollectionOwningSchema,

string xmlSchemaCollectionName

)

参数

parameterName

要映射的参数的名称。

dbType

SqlDbType 值之一。

size

参数的长度。

direction

ParameterDirection 值之一。

precision

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

scale

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

sourceColumn

源列的名称。

sourceVersion

DataRowVersion 值之一。

sourceColumnNullMapping

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

value

一个 Object,它是 SqlParameter 的值。

xmlSchemaCollectionDatabase

XML 实例的架构集合所在的数据库的名称。

xmlSchemaCollectionOwningSchema

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

xmlSchemaCollectionName

此参数的架构集合的名称。

备注

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

SqlParameter

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

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

System.Object

System.MarshalByRefObject

System.Data.SqlClient.SqlParameter

[Visual Basic]

NotInheritable Public Class SqlParameter

Inherits MarshalByRefObject

Implements IDbDataParameter, IDataParameter, ICloneable

[C#]

public sealed class SqlParameter : MarshalByRefObject,

IDbDataParameter, IDataParameter, ICloneable

[C++]

public __gc __sealed class SqlParameter : public

MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneable

[JScript]

public class SqlParameter extends MarshalByRefObject implements

IDbDataParameter, IDataParameter, ICloneable

线程安全

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

备注

参数名称不区分大小写。

示例

[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.VarChar, 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.VarChar, 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::VarChar, 80)->Value = S"toasters";

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

myDataAdapter->Fill(myDataSet);

}

[JScript] 没有可用于 JScript 的示例。若要查看 Visual BasicC# 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.NVarChar,255,DataHelper.CheckNull(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.Author;

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;

}

声明:本帖转自 http://www.cnblogs.com/angelfeather/articles/1225902.html

在此对本帖原创作者,致以最诚挚的谢意!

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

例子:

SqlParameter[] paraList = new SqlParameter[7];

paraList[0] = new SqlParameter( "@userName ", SqlDbType.VarChar, 50);

paraList[0].Value = personModel.UserName;

paraList[1] = new SqlParameter( "@account ", SqlDbType.VarChar, 100);

paraList[1].Value = personModel.Account;

paraList[2] = new SqlParameter( "@pwd ", SqlDbType.VarChar, 100);

paraList[2].Value = personModel.Pwd;

paraList[3] = new SqlParameter( "@unitID ", SqlDbType.VarChar, 20);

paraList[3].Value = personModel.UnitID;

paraList[4] = new SqlParameter( "@email ", SqlDbType.VarChar, 100);

paraList[4].Value = personModel.Email;

paraList[5] = new SqlParameter( "@officeTel ", SqlDbType.VarChar, 20);

paraList[5].Value = personModel.OfficeTel;

paraList[6] = new SqlParameter( "@mobile ", SqlDbType.VarChar, 20);

paraList[6].Value = personModel.Mobile;

return sd.ExecuteNonQuery( "UP_Person_ADD ", paraList);

声明:本帖转自 http://hljncxjh.blog.163.com/blog/static/7616708200862085248668/

在此对本帖原创作者,致以最诚挚的谢意!

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

sqlparameter问题,解决参考方法参见网址:

http://topic.csdn.net/t/20050902/15/4246228.html

分享到:
评论

相关推荐

    C#中SqlParameter类使用方法小结.doc

    C#中SqlParameter类使用方法小结.doc

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

    C# 中 SqlParameter 类的使用方法小结 在 C# 中,SqlParameter 类是一个非常重要的类,它可以帮助我们避免 SQL 注入的危害。下面我们将详细讲解 SqlParameter 类的使用方法和避免 SQL 注入的技巧。 一、直接在 SQL...

    C#SqlParameter参数写法

    根据提供的信息,我们可以深入探讨C#中的`SqlParameter`参数及其在数据库操作中的应用。下面将详细介绍如何使用`SqlParameter`以及其在SQL查询执行中的具体作用。 ### C# SqlParameter 参数详解 `SqlParameter`类...

    C#操作SQL公共类

    总结来说,C#操作SQL的公共类如SqlHelper,是实现数据库操作的一种高效方式,它简化了数据库交互的代码,提高了代码的可维护性,并通过缓存参数和使用静态方法优化了性能。开发者可以根据实际需求,扩展此类以满足更...

    自动生成SQL语句_C#_sql_

    同时,使用SqlParameter来传递参数,可以防止SQL注入攻击。 四、动态SQL与存储过程 1. 动态SQL:在C#中,你可以使用字符串操作生成动态SQL语句,这在需要根据条件生成不同结构的SQL时非常有用。例如,你可以根据...

    C#总结:DBHelper类,连接数据库

    在这个总结中,我们将深入探讨DBHelper类及其在C#中连接数据库的应用。 1. DBHelper类的概念: DBHelper类通常是为了封装ADO.NET组件,如SqlConnection、SqlCommand、SqlDataAdapter等,以提供更简洁、安全的数据库...

    C#执行SQL的存储过程

    在C#中,可以通过`SqlParameter`类来定义这些参数,并将它们添加到`SqlCommand`对象的`Parameters`集合中。 ```csharp // 定义输出参数 SqlParameter sp1 = new SqlParameter("@outcome", SqlDbType.Bit); sp1....

    C#根据模型动态生成SQL和DBHelper

    在C#中,你可以创建一个DBHelper类,包含如ExecuteNonQuery、ExecuteScalar、ExecuteReader等方法,分别对应不同的数据库操作。DBHelper通常会管理数据库连接的生命周期,如使用连接池来优化性能,处理异常等,使得...

    C#中企业库及其使用方法

    3. **SqlParameter 语句方式的Exists方法**:除了SQL语句方式,还提供了使用`SqlParameter`的版本,允许更灵活的参数传递,增强了SQL注入防护能力。 【使用企业库的优势】 使用Enterprise Library可以带来以下优势...

    C#调用sql2000存储过程方法小结

    总结,C#调用SQL Server 2000存储过程时,无论是输入参数还是输出参数,关键在于正确创建`SqlCommand`对象,设置`CommandType`,定义`SqlParameter`对象,并将其添加到`Parameters`集合中。理解这些步骤对于进行...

    C#图片转换成二进制流并且保存到sql server数据库.pdf

    在C#中,可以使用SqlParameter类来将二进制流保存到SQL Server数据库。下面是一个简单的示例代码: ```csharp using System.Data.SqlClient; // 创建SqlConnection对象 SqlConnection conn = new SqlConnection(...

    C#中企业库及其使用方法

    ### C#中企业库及其使用方法 #### 一、企业库简介 Enterprise Library 是由 Microsoft Patterns & Practices 团队开发的一套组件集,用于帮助开发者更高效地构建可扩展、可维护的应用程序。Enterprise Library 2.0...

    C#操作SQL Server和Access两种数据库的封装类

    3. 参数化查询:通过添加SqlParameter对象防止SQL注入攻击。 4. 数据读取:使用SqlDataReader或SqlDataAdapter获取查询结果并填充DataSet或DataTable。 5. 错误处理:捕获和处理SqlException,确保程序健壮性。 ...

    C# SQLDBHelp

    根据给定的文件信息,我们可以总结出以下关于C#中SQLDBHelp类的关键知识点: ### 一、连接数据库 在`SQLDBHelp`类中,`SqlConnection`对象用于与数据库建立连接。`SqlConnection`对象是.NET Framework中的一个关键...

    C#中oracle连接数据库的封装类

    在本场景中,我们关注的是一个名为"C#中oracle连接数据库的封装类"的主题,这个主题涉及到创建一个名为`DbHelperOra.cs`的类,用于简化与Oracle数据库的交互。这种封装可以提高代码的可读性和复用性,减少直接处理...

    c#与sql简单分页程序

    4. **参数化查询**:如果查询包含动态条件,使用SqlParameter来避免SQL注入攻击。 5. **执行查询**:调用SqlCommand的ExecuteReader方法来执行查询,这将返回一个SqlDataReader对象,可以用来遍历结果集。 6. **...

    C#中使用的数据库工具类

    总结来说,C#中的数据库工具类是为了简化和规范化数据库操作,通过封装常用方法,使得数据库访问变得更加便捷和安全。`SQL.cs`文件很可能是实现这些功能的核心代码。在实际开发中,根据项目需求,还可以扩展工具类,...

    C#调用sql存储过程分页

    SqlParameter param = new SqlParameter("rval", SqlDbType.Int); param.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(param); sqlConn.Open(); Label1.Text = cmd.ExecuteNonQuery()....

    c#数据库.docx

    总结起来,通过上述知识点的学习,我们可以更好地理解和掌握如何使用C#进行数据库操作,包括事务处理、动态SQL构建、存储过程调用、查询分页以及正确处理NULL值等关键方面。这些技能对于开发高效稳定的应用程序至关...

Global site tag (gtag.js) - Google Analytics