您的当前位置:首页正文

SqlHelper中SqlHelperParameterCache类的用法介绍

2023-11-10 来源:帮我找美食网

SqlHelper类中提供了三种可以用来管理SqlParameter参数的共享方法。下面来一一讲解:

1、CacheParameterSet

将SqlParameter参数数组存储到本地缓存中

2、GetCacheParameterSet

用于读取缓存中的SqlParameter数组,和上面CacheParameterSet组合使用

3、GetSpSqlparameter

一种重载方法,用于检索指定存储过程中的相应参数(首先查询一次数据库,然后缓存结果,以便将来查询),该方法从缓存中检索存储过程的参数,如果存储过程中没有,那么就从.NET 的 SqlCommandBuilder 类从内部检索,并将它们添加到缓存中,以便用于后续的检索请求。然后,为每个参数指定相应的参数设置(将参数值设置为DBNull.Value),最后将这些参数以数组形式返回给客户端。

SqlHelper中SqlHelperParameterCache类的用法介绍

标签:net   缓存   str   数组   指定   介绍   man   gets   psql   

小编还为您整理了以下内容,可能对您也有帮助:

sqlhelper是干什么的

SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver、oracle、access、Mysql数据库,也是一个开源项目,提供免费下载。   SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。   SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

请给一段C#类在winform中的代码示例,说明类怎么使用?

实体类

public class PhoneBook

{

private string name;

private string phone;

private struct address

{

public string city;

public string street;

public uint no;

}

public string Phone

{

get{

return phone;

}

set{

phone=value;

}

}

public PhoneBook(string n){

name=n;

}

}

方法对方法类SqlHelper的方法ExecuteNonQuery的调用

public static bool do()

{

PhoneBook pb=new PhoneBook();

boolean state = false;

try {

String[] parms = {【参数区(如果类型为非String型,则"" + 变量)】};

int i = SQLHelper.ExecuteNonQuery(【SQL语句】, parms『可为null』);

if (i == 1) {

state = true;

//实体类调用

pb.Phone= i;

}

} catch (Exception e) {

e.printStackTrace();

}

return state;

}

下面是类

public abstract class SqlHelper {

//Database connection strings

public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;

private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connectionString)) {

PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

int val = cmd.ExecuteNonQuery();

cmd.Parameters.Clear();

return val;

}

}

public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

int val = cmd.ExecuteNonQuery();

cmd.Parameters.Clear();

return val;

}

public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);

int val = cmd.ExecuteNonQuery();

cmd.Parameters.Clear();

return val;

}

public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

SqlConnection conn = new SqlConnection(connectionString);

try {

PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

cmd.Parameters.Clear();

return rdr;

}

catch {

conn.Close();

throw;

}

}

public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

using (SqlConnection connection = new SqlConnection(connectionString)) {

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

object val = cmd.ExecuteScalar();

cmd.Parameters.Clear();

return val;

}

}

public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

object val = cmd.ExecuteScalar();

cmd.Parameters.Clear();

return val;

}

public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) {

parmCache[cacheKey] = commandParameters;

}

public static SqlParameter[] GetCachedParameters(string cacheKey) {

SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

if (cachedParms == null)

return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

for (int i = 0, j = cachedParms.Length; i < j; i++)

clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

return clonedParms;

}

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {

if (conn.State != ConnectionState.Open)

conn.Open();

cmd.Connection = conn;

cmd.CommandText = cmdText;

if (trans != null)

cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null) {

foreach (SqlParameter parm in cmdParms)

cmd.Parameters.Add(parm);

}

}

}

怎么解决sqlhelper 连接超时的问题

‘在验证数据时进行
Me.txtRemark.Trim()

‘在保存时进行
With info
If (Me.txtRemark.HasValue) Then
.Remark = Me.txtRemark.Text
Else
.Remark = Nothing
End If
End With
技术分享


这段代码并不难理解,不过需要说明的是,必填的字段为了验证是否有值Trim是得有的,而不必填的字段实质上则只需要赋值的那一行,Trim和Null则可以交由底层SqlHelper里进行处理。

 

首先我们定义一个配置类来进行控制:

技术分享
‘‘‘ <summary>
‘‘‘ Database configuration
‘‘‘ </summary>
Friend NotInheritable Class Config

‘ Removes all occurrences of white space characters
Public Shared ReadOnly TrimString As Boolean = True
‘ translate the empty string to null
Public Shared ReadOnly EmptyStringToNull As Boolean = True
‘ translate the null boolean to false
Public Shared ReadOnly NullBooleanToFalse As Boolean = True
‘ translate the null value to dbnull value
Public Shared ReadOnly NullValueToDBNull As Boolean = True

End Class
技术分享


前三项正是我们要实现的功能的开关,而最后一项NullValueToDBNull则需要另外说明一下了:

在实体类中,值类型我都是用Nullable(Of T)来存储的,这当中就包含了Null的情况,而在传递至数据库时,Null是作为默认值还是DBNull呢?这是不确定的,所以这个开关就是用于约定Null作为DBNull处理。

 

接下来就是对SqlHelper的改造了,需要改动的只有一个方法:PrepareCommand

技术分享
‘‘‘ <summary>
‘‘‘ This method opens (if necessary) and assigns a connection, transaction, command type and parameters
‘‘‘ to the provided command.
‘‘‘ </summary>
‘‘‘ <param name="command">the SqlCommand to be prepared</param>
‘‘‘ <param name="connection">a valid SqlConnection, on which to execute this command</param>
‘‘‘ <param name="transaction">a valid SqlTransaction, or ‘null‘</param>
‘‘‘ <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
‘‘‘ <param name="commandText">the stored procedure name or T-SQL command</param>
‘‘‘ <param name="commandParameters">an array of SqlParameters to be associated with the command or ‘null‘ if no parameters are required</param>
Private Shared Sub PrepareCommand(ByVal command As SqlCommand, _
ByVal connection As SqlConnection, _
ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal commandParameters() As SqlParameter)

‘if the provided connection is not open, we will open it
If connection.State <> ConnectionState.Open Then
connection.Open()
End If

‘associate the connection with the command
command.Connection = connection

‘set the command text (stored procedure name or SQL statement)
command.CommandText = commandText

‘if we were provided a transaction, assign it.
If Not (transaction Is Nothing) Then
command.Transaction = transaction
End If

‘set the command type
command.CommandType = commandType

‘attach the command parameters if they are provided
If Not (commandParameters Is Nothing) Then
For Each p As SqlParameter In commandParameters
If (p.Direction <> ParameterDirection.Output) Then
Select Case p.DbType
Case DbType.String, DbType.StringFixedLength, DbType.AnsiString, DbType.AnsiStringFixedLength
If (Not p.Value Is Nothing AndAlso Not p.Value Is DBNull.Value) Then
Dim str As String = p.Value.ToString()

If (Config.TrimString) Then
str = str.Trim()
End If

If (Config.EmptyStringToNull AndAlso str.Length = 0) Then
str = Nothing
End If

p.Value = str
End If
Case DbType.Boolean
If (Config.NullBooleanToFalse AndAlso p.Value Is Nothing) Then
p.Value = False
End If
End Select

If (Config.NullValueToDBNull AndAlso p.Value Is Nothing) Then
p.Value = DBNull.Value
End If
End If

command.Parameters.Add(p)
Next
End If

End Sub ‘PrepareCommand
技术分享


可以看到根据Parameter的DbType作了相应的处理,这样处理后,非必填的字段,就只以只用一句赋值语句,剩下的去空白字符和Null判断就交由底层处理了,省心省力!~~~

使用SqlHelper的一个小技巧

标签:

怎么解决sqlhelper 连接超时的问题

‘在验证数据时进行
Me.txtRemark.Trim()

‘在保存时进行
With info
If (Me.txtRemark.HasValue) Then
.Remark = Me.txtRemark.Text
Else
.Remark = Nothing
End If
End With
技术分享


这段代码并不难理解,不过需要说明的是,必填的字段为了验证是否有值Trim是得有的,而不必填的字段实质上则只需要赋值的那一行,Trim和Null则可以交由底层SqlHelper里进行处理。

 

首先我们定义一个配置类来进行控制:

技术分享
‘‘‘ <summary>
‘‘‘ Database configuration
‘‘‘ </summary>
Friend NotInheritable Class Config

‘ Removes all occurrences of white space characters
Public Shared ReadOnly TrimString As Boolean = True
‘ translate the empty string to null
Public Shared ReadOnly EmptyStringToNull As Boolean = True
‘ translate the null boolean to false
Public Shared ReadOnly NullBooleanToFalse As Boolean = True
‘ translate the null value to dbnull value
Public Shared ReadOnly NullValueToDBNull As Boolean = True

End Class
技术分享


前三项正是我们要实现的功能的开关,而最后一项NullValueToDBNull则需要另外说明一下了:

在实体类中,值类型我都是用Nullable(Of T)来存储的,这当中就包含了Null的情况,而在传递至数据库时,Null是作为默认值还是DBNull呢?这是不确定的,所以这个开关就是用于约定Null作为DBNull处理。

 

接下来就是对SqlHelper的改造了,需要改动的只有一个方法:PrepareCommand

技术分享
‘‘‘ <summary>
‘‘‘ This method opens (if necessary) and assigns a connection, transaction, command type and parameters
‘‘‘ to the provided command.
‘‘‘ </summary>
‘‘‘ <param name="command">the SqlCommand to be prepared</param>
‘‘‘ <param name="connection">a valid SqlConnection, on which to execute this command</param>
‘‘‘ <param name="transaction">a valid SqlTransaction, or ‘null‘</param>
‘‘‘ <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
‘‘‘ <param name="commandText">the stored procedure name or T-SQL command</param>
‘‘‘ <param name="commandParameters">an array of SqlParameters to be associated with the command or ‘null‘ if no parameters are required</param>
Private Shared Sub PrepareCommand(ByVal command As SqlCommand, _
ByVal connection As SqlConnection, _
ByVal transaction As SqlTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal commandParameters() As SqlParameter)

‘if the provided connection is not open, we will open it
If connection.State <> ConnectionState.Open Then
connection.Open()
End If

‘associate the connection with the command
command.Connection = connection

‘set the command text (stored procedure name or SQL statement)
command.CommandText = commandText

‘if we were provided a transaction, assign it.
If Not (transaction Is Nothing) Then
command.Transaction = transaction
End If

‘set the command type
command.CommandType = commandType

‘attach the command parameters if they are provided
If Not (commandParameters Is Nothing) Then
For Each p As SqlParameter In commandParameters
If (p.Direction <> ParameterDirection.Output) Then
Select Case p.DbType
Case DbType.String, DbType.StringFixedLength, DbType.AnsiString, DbType.AnsiStringFixedLength
If (Not p.Value Is Nothing AndAlso Not p.Value Is DBNull.Value) Then
Dim str As String = p.Value.ToString()

If (Config.TrimString) Then
str = str.Trim()
End If

If (Config.EmptyStringToNull AndAlso str.Length = 0) Then
str = Nothing
End If

p.Value = str
End If
Case DbType.Boolean
If (Config.NullBooleanToFalse AndAlso p.Value Is Nothing) Then
p.Value = False
End If
End Select

If (Config.NullValueToDBNull AndAlso p.Value Is Nothing) Then
p.Value = DBNull.Value
End If
End If

command.Parameters.Add(p)
Next
End If

End Sub ‘PrepareCommand
技术分享


可以看到根据Parameter的DbType作了相应的处理,这样处理后,非必填的字段,就只以只用一句赋值语句,剩下的去空白字符和Null判断就交由底层处理了,省心省力!~~~

使用SqlHelper的一个小技巧

标签:

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 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 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.NVarChar,255,DataHelper.CheckNull(ev.ReferralUrl)),

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

};

SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcere,"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;

}

.net/vb.net/c#的sqlhelper里面,commandParameter.ParameterName.Substring(1)什么意思?

这里的Substring(1)的意思是从索引为1的开始截取一直截取到最后。

比如你获取的commandParameter.ParameterName这个字符串的值是abcd;

那么上面的写法就是从索引为1的地方开始截取,索引是从0开始计算的,那么就是说字符串"abcd"索引0的位置是a,那么从1开始截取就是从b开始截取,一直截取到最后。

那么这样最后截取下来的字符串就是bcd.

substring(int beginIndex, int endIndex) 这个是substring另外一个方法,这2个参数第一个是开始截取的位置,比如你输入1,那么就是从索引b的位置开始截取,后面的参数是截取结束的位置,如果你输入2,那就是截取到c就结束了,最后截取下来的字符串就是bc.

你自己可以测试下;

先定义个字符串

string str="asdfasdfasdf";//随便怎么定义

string str2="";

然后str2=str.substring(5)//这里是从索引为5的地方开始截取,一直截取到最后。

str2=str.substring(3,10)//这里是从索引3的地方开始截取,一直截取到索引为10的位置结束。

Top