日期:2014-05-19  浏览次数:20422 次

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