string
sConnectionString
=
@"
Server=(local)\SQLEXPRESS;database=Forum;Trusted_Connection=True
"
;
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand( " SELECT COUNT(*) FROM tbClass WHERE ClassName=@ClassName " , conn))
{
cmd.Parameters.AddWithValue( " @ClassName " , tb_ClassName.Text);
Response.Write( string .Format( " 共有{0}条记录符合要求<br /> " , cmd.ExecuteScalar().ToString()));
}
}
using (SqlConnection conn = new SqlConnection(sConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand( " SELECT COUNT(*) FROM tbClass WHERE ClassName=@ClassName " , conn))
{
cmd.Parameters.AddWithValue( " @ClassName " , tb_ClassName.Text);
Response.Write( string .Format( " 共有{0}条记录符合要求<br /> " , cmd.ExecuteScalar().ToString()));
}
}
在这段程序中,我们使用参数代替字符串的拼接。我们需要注意如下几点。
·SQL语句或者存储过程中指定的所有参数必须和Parameters属性中的所有参数对应。
·参数集合的Add()方法有多种重载
cmd.Parameters.AddWithValue(
"
@ClassName
"
, tb_ClassName.Text);
// 就可以替代
cmd.Parameters.Add( " @ClassName " , SqlDbType.VarChar, 50 );
cmd.Parameters[ " @ClassName " ].Value = tb_ClassName.Text;
// 就可以替代
cmd.Parameters.Add( " @ClassName " , SqlDbType.VarChar, 50 );
cmd.Parameters[ " @ClassName " ].Value = tb_ClassName.Text;
AddWithValue()方法会自动检测参数的类型和长度,对于Add()方法其实也可以省略参数类型和长度。不过为了程序的可读性还是建议你为参数指字类型和长度,当然这个类型和长度需要和数据库字段的真实类型和长度对应。
我们还注意到,SqlParameter 对象有一个 Diection 方法。对于SQL语句中的参数,这个值没有什么意义,它是用来指定存储过程参数方向。它的值由 ParameterDirection 枚举来定义,共有以下4个类型。
·Input
·InputOutput
·Putput
·ReturnValue