public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connString); try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch {
conn.Close();
throw;
} }
public static IList GetCitysView()
{
IList view = new ArrayList();
string cmdText = "select city from citys where ifkt=1";
SqlDataReader dr = Database.ExecuteReader(CommandType.Text,cmdText,null);
while(dr.Read())
{
ListItemEntity entity = new ListItemEntity(dr.GetString(0),dr.GetString(0));
view.Add(entity);
}
dr.Close();
return view;
}用完之后要记得关闭dr.Close();

解决方案 »

  1.   

    Public Overloads Function ReturnDataReader(ByVal SelectSql As String, Optional ByVal CmdType As String = "Text") As SqlClient.SqlDataReader
            Try
                Dim Connstr As New SqlClient.SqlConnection(SqlConnstring)
                Connstr.Open()
                Dim SqlCmd As New SqlClient.SqlCommand
                With SqlCmd
                    If CmdType = "Text" Then
                        .CommandType = CommandType.Text
                    Else
                        .CommandType = CommandType.StoredProcedure
                    End If
                    .CommandText = SelectSql
                    .Connection = Connstr
                End With
                ReturnDataReader = SqlCmd.ExecuteReader
                Return ReturnDataReader
                Connstr.Close()
                Connstr = Nothing
            Catch        End Try
        End Function
    在程序中使用时候后,将DR.close都写上的啊,真是见鬼了
      

  2.   

    注意对象的释放,
    比如dr.close();一定要有。
    最好用using语句,方便
      

  3.   

    把Try Catch……这个语句去掉
      

  4.   

    刚开始我在模块中写上面的后来我一火起来,把这个模块放在页面上使用去掉了Try Catch....但页面上一多的话,就糊涂了出现上面说的第二个问题了
      

  5.   

    你dr.close()了没有?在调用的时候
      

  6.   

    我在调用ReturnDataReader之后,都将其DR.close了Dim Sql As String = "select " & FiledName & " from " & TBLName() & " where substring(issue_userid,1,7)='" & Session("company_userid") & "' and " & _
                " issue_sort='broker' and del=0 and real_del=0 and datediff(d,update_date,getdate())>" & Str3
            Dim Dr As SqlClient.SqlDataReader = SqlAction.ReturnDataReader(Sql)
            Dim I As Integer
            Dim T As New DataTable()
            With T.Columns
                .Add("房源编号")
                .Add(Fld1)
                .Add("物业地址")
                If GetTbl() <> "products" Then
                    .Add("套型")
                    .Add("面积(m<sup>2</sup>)")
                End If
                .Add(Fld2)
                .Add("时间")
                .Add("经纪人")
            End With
            Dim R As DataRow
            Do While Dr.Read
                R = T.NewRow
                For I = 0 To Dr.FieldCount - 1
                    Dim S As String
                    If GetTbl() <> "products" And I = 3 Then
                        S = FuncStr.ReturnSort(Dr(I))
                    Else
                        If I = Dr.FieldCount - 2 Then
                            S = FormatDateTime(Dr(I), DateFormat.ShortDate)
                        ElseIf I = Dr.FieldCount - 1 Then
                            Dim Sql_BName As String = "Select broker_name from fh_f_broker_userid('" & Dr(I) & "')"
                            Dim Dr_BName As SqlClient.SqlDataReader = SqlAction.ReturnDataReader(Sql_BName)
                            If Dr_BName.Read Then
                                S = Dr_BName("broker_name")
                            Else
                                S = ""
                            End If
                            Dr_BName.Close()  
                        Else
                            S = Dr(I)
                        End If
                    End If
                    R(I) = S
                    S = ""
                Next
                T.Rows.Add(R)
            Loop
            Dr.Close()
      

  7.   

    这不是连接没关的或DataReader没关的问题,而是SqlDataReader类型与你前台变量的类型之间的赋值问题!
    比如:如果你将DataReader直接赋给int型的变量,绝对是"未将对象引用到对象实例",
    因此这是类型之间的转换问题!