当前位置: 首页 > 面试题库 >

C#SQL处置什么

蒋典
2023-03-14
问题内容

我有下面的代码来查询存储过程中的记录,但是担心我可能并没有处置我所需要的东西,也没有处置当垃圾收集器不久之后清除该对象时的处置。

我是否需要处置SqlDataReader,因为它位于try catch块中?

我需要同时运行cmd.Dispose和cmd.Connection.Close还是一个推断另一个?

垃圾收集器会最终以任何方式处置所有这些对象(可能不够及时)还是可能由于使用非托管代码而隐式要求处置这些对象?

public void GetData(string studentID)
    {
        SqlCommand cmd = new SqlCommand("sp_stored_proc", 
                new SqlConnection(Settings.Default.connectionString)) 
                { CommandType = CommandType.StoredProcedure };
        try
        {
            cmd.Connection.Open();
            cmd.Parameters.AddWithValue("@student_id", studentID);
            SqlDataReader dr = cmd.ExecuteReader();

         //do something with the data

            if (dr != null)
                dr.Dispose();
        }
        catch
        {
            //error handling
        }
        finally
        {
            if (cmd != null)
            {
                cmd.Dispose();
                cmd.Connection.Close();
            }

        }

    }

问题答案:

您应该配置数据读取器和命令。如果您布置该命令,则无需单独关闭连接。理想情况下,您都应该使用一个using块:

using (SqlCommand cmd = new...)
{
    // do stuff
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        // do stuff
    }
}

如果您需要异常处理,请在using块内部或周围单独进行操作-Dispose尽管使用,无需进行final调用using



 类似资料:
  • 问题内容: 我是一名C ++程序员,偶尔使用MySQL处理数据库,但是我的SQL知识非常有限。但是,我当然愿意改变这一点。 目前,我正尝试仅通过SQL查询对数据库中的数据进行分析(!)。但是我将放弃,而是将数据导入C 并使用C 代码进行分析。 我已经与同事讨论了这一点,他们也促使我使用C ++,他说SQL并不是用于复杂的分析,而是主要用于导入(从现有表中)和导出(到新表中)数据,还有更多内容。例如

  • 我不得不问这是一个好的做法吗?好心地建议使用它的优点和缺点(利弊)。

  • 问题内容: 我在sql server 2012中有一个sql表,需要重命名。我知道在其他数据库系统中执行此操作的方法如下: 但是,似乎SQL Server需要不同的语法。从SQL Management Studio中,我在“设计视图”中重命名了该表,然后右键单击以生成“生成更改脚本”,它产生了以下内容: 使用sp_rename是重命名的最佳实践吗? 另外,它还生成了另一行来设置lock_escla

  • 主要内容:SQL 的用途,SQL 简史,SQL 执行过程,SQL 命令SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本。 ANSI 是 American National Standards Institute 的缩写,中文译为“美国国家标准协会”。 SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。S

  • 问题内容: MySQL提供了一个名为FIELD()的字符串函数,该函数接受可变数量的参数。返回值是第一个参数在其余参数列表中的位置。换一种说法: 将返回4,因为’d’是第一个参数之后的第四个参数。 此功能提供了根据非常特定的顺序对查询结果进行排序的功能。对于我当前的应用程序,我需要管理四种状态:有效,已批准,已拒绝和已提交。但是,如果仅按状态列排序,我会感觉结果列表的可用性降低了,因为拒绝和活动状

  • 问题内容: 当在使用Doctrine类时需要自定义查询时,有人可以为我提供一些明确的理由(支持事实)来使用/学习DQL与SQL吗? 我发现,如果无法使用ORM的内置关系功能来实现某些目标,通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法。在这种方法中,用直接的SQL编写所需的代码(使用带有适当准备好的语句/注入保护等的PDO)。DQL似乎是学习/调试/维护的另一种语言,