我正在使用 vb.net,在课堂上conexion
我有以下方法:
Function consulta()
Try
conectar()
comando = conexion.CreateCommand()
comando.CommandText = "select * from persona"
reader = comando.ExecuteReader()
Catch ex As Exception
MsgBox("Error 1 " + ex.ToString)
End Try
desconectar()
Return reader
End Function
该对象reader
的类型为SqlDataReader
。
我需要的不是在 a 中输入结果DataGrid
,而是从表单中调用它们并在 a 中显示每个字段TextBox
。例如字段nombre
输入它在一个TextBox
,apellido
在另一个TextBox
。
当前设计中有两个非常严重和基本的问题,其他答案没有提到:
SqlDataReader
.desconectar()
在返回 之前关闭连接 ( )SqlDataReader
,因此当您尝试使用 读取数据时SqlDataReader
,它会抛出异常。我一次又一次地看到使用这种使用全局连接的模式的问题。这是非常糟糕的做法,会导致更严重的程序出现问题。集中打开连接的代码并没有错。但是将连接保存在全局变量中是不正确的。
第二点的问题是,为了返回 a
SqlDataReader
并能够继续使用它,连接必须保持打开状态。但是如果你desconectar()
从你的方法中删除调用来解决这个问题,你的代码现在变得比现在更脆弱,因为不清楚谁负责关闭连接。这是一个更健壮且可重用的模式,您可以使用它从 a 中读取
SqlDataReader
任何查询的数据,并且不属于上述设计问题。对于我与您分享的示例,我将假设您已经定义了一个简单地返回
conectar()
的方法,而不是打开连接并将其分配给全局变量(以避免)的方法没有将其分配给全局变量CrearConexion
的新实例(正确)。SqlConnection
就像是:方法
EjecutarLeerConsulta
:使用此方法,您可以使用最佳实践执行和读取任何查询,无需全局变量,无需担心何时打开和关闭连接等。一切都在这个中心方法中自动处理。
如何使用它
要使用该方法,您需要向其传递至少 2 个参数:
SqlParameter
如果查询需要参数列表 ( )。例子:
如果您需要使用参数构建查询,调用将如下所示:
好吧,首先我建议您将要返回的类型添加到最后的方法中。因此:
现在要从数据阅读器中获取数据,您可以这样做
它使用 SQLDataReader 类,在 c# 中,您可以按索引或按列名调用它,如下所示