我有下面的代码来查询存储过程中的记录,但是担心我可能并没有处置我所需要的东西,也没有处置当垃圾收集器不久之后清除该对象时的处置。
我是否需要处置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似乎是学习/调试/维护的另一种语言,