SQL语句的参数问题????
我在一后台代码中写了如下代码:
Dim materialID As String = Me.Request.QueryString( "materialID ")
Dim str As String = "select * from material where material.materialID= ' " + materialID + " ' "
Dim sqlcomm As SqlCommand = New SqlCommand(str, con)
Dim dr As SqlDataReader = sqlcomm.ExecuteReader
请问上面select语句有没有错误, 它跟下面的代码作用是否一样.
Dim materialID As String = Me.Request.QueryString( "materialID ")
Dim str As String = "select * from material where material.materialID=@materialID "
Dim sqlcomm As SqlCommand = New SqlCommand(str, con)
sqlcomm.Parameters.Add( "@materialID ", SqlDbType.VarChar, 10).Value = materialID
Dim dr As SqlDataReader = sqlcomm.ExecuteReader
------解决方案--------------------提示 LZ luodongju 一下:
你所使用的是 ExecuteReader 方法返回的对象,即 SqlDataReader 类型的对象,该类型的对象要获取返回的数据时,应该对每一条数据前操作 <SqlDataReader Object> .Read(),然后判断这个 Read() 方法的返回值,如果为 true 表示当前成功读出一条记录,这时可以用以下方法访问记录字段
<SqlDataReader Object> [ " <Field Name> "] (这里返回的对象是 Object,根据需要对其进行类型转换,一般情况下可直接后 .ToString() 来获取字符串值)
如果返回的是 false 则表示没有获取到记录,一般情况下表示已经读到返回数据集的尾部了。
对于 SqlDataReader 类型对象的通常操作方法为:
SqlDataReader <SqlDataReader Object> = <SqlCommand Object> .ExecuteReader();
while ( <SqlDataReader Object> .Read() == true)
{
<执行对数据记录的操作>
}
SqlDataReader 对象是一种轻量级的数据库访问对象,它提供类似数据库游标的功能,是只进读取数据方式的。
------解决方案--------------------Dim materialID As String = Me.Request.QueryString( "materialID ")
if(materialID ==null)
throw new Exception( "参数materialID 没有值。 ");
Dim str As String = "select * from material where material.materialID= ' " +
materialID.Replace( " ' ", " ' ' ") + " ' "
Dim sqlcomm As SqlCommand = New SqlCommand(str, con)
Dim dr As SqlDataReader = sqlcomm.ExecuteReader