Vb.net VB SQL CommandText属性尚未初始化
我刚开始使用后台工作人员,我正在尝试运行以下代码。但是我在Vb.net VB SQL CommandText属性尚未初始化,vb.net,Vb.net,我刚开始使用后台工作人员,我正在尝试运行以下代码。但是我在m.\u Value\u CreatedDate=m.\u MyCMD.ExecuteScalar()行上收到一个运行时错误。错误是: 其他信息:ExecuteScalar:CommandText属性尚未设置 已初始化 以下是我使用的参数: Class MyParameters Friend _QueryStr As String Friend _Value_CreatedDate As Object
m.\u Value\u CreatedDate=m.\u MyCMD.ExecuteScalar()
行上收到一个运行时错误。错误是:
其他信息:ExecuteScalar:CommandText属性尚未设置
已初始化
以下是我使用的参数:
Class MyParameters
Friend _QueryStr As String
Friend _Value_CreatedDate As Object
Friend _AccountID As Object
Friend _Selected_MemberID As String = Committee_Database.GridView1.GetFocusedRowCellValue("Unique ID").ToString
Friend _Con As New SqlConnection('Connection string ommitted)
Friend _MyCMD As New SqlCommand(_QueryStr, _Con)
End Class
如果我做了一些非常错误的事情,请原谅,我是自学成才,并且正在与backgroundworker
进行实验。值得注意的是,\u QueryStr
将在后台工作人员对同一数据库运行多个查询时多次更改,并且(据我所知)将查询返回的每个值存储到变量中-\u Value\u CreatedDate
是我在此代码中使用的变量。我在下面的示例中介绍了如何循环使用\u QueryStr
变量,并将每次返回的值存储到不同的变量中
Try
m._QueryStr = "SELECT TOP 1 aAccount_ID FROM Account WHERE aUser_Name='" & _Selected_AccountID & "'"
m._MyCMD.CommandType = CommandType.Text
m._AccountID = m._MyCMD.ExecuteScalar()
Catch ex As Exception
End Try
我做错什么了吗 在类的实现中
MyParameters
使用变量_QueryStr的值直接用声明初始化SqlCommand。此时变量_QueryStr尚未初始化,因此它是一个空字符串
初始化MyParameters
的实例后,您可以更改\u QueryStr
的值(根据您的情况更改多次),但这些更改不会自动传递到SqlCommand的CommandText。它仍然包含空的初始值
您可以解决这个问题,为新的QueryStr
属性构建适当的getter和setter。当有人试图设置属性时,下面的代码会更改内部字段_QueryStr(现在为private)的值,并重新初始化SqlCommand的CommandText属性
Class MyParameters
Private _QueryStr As String
Public Property QueryStr() As String
Get
Return _QueryStr
End Get
Set(ByVal value As String)
_QueryStr = value
_MyCMD.CommandText = _QueryStr
End Set
End Property
..... other properties
Friend _MyCMD As New SqlCommand(_QueryStr, _Con)
End Class
现在当你写作的时候
Try
m.QueryStr = "SELECT ...."
....
新命令文本已正确指定给您的命令
作为旁注:我建议使用普通的ADO.NET对象(或者学习如何使用ORM工具)。除非您对这些ADO.NET对象的工作原理有非常深入的了解,否则不要尝试将它们封装在自定义类中。您将一无所获,代码将面临许多问题。例如,您的代码很容易利用,因为MyParameters类没有使用参数化查询的规定。您的代码没有方法关闭和处理嵌入在类中的SqlConnection,从而导致资源泄漏。事实上,我的问题不同,但这个答案让我想到了捕获错误的方法。我使用Asynchronus DataReader获取数据,我的旧代码甚至直接更改CommandText,因为它在错误的位置更改。生成任务变量和等待操作之间的更改。SqlCommand属性的所有更改均未反映任务操作。我不敢相信这个bug会消耗我一整天的时间,谢谢你帮我解决这个bug。
Try
m.QueryStr = "SELECT ...."
....