Sql server ExecuteOnQuery:尚未初始化连接属性。即使连接打开

Sql server ExecuteOnQuery:尚未初始化连接属性。即使连接打开,sql-server,vb.net,Sql Server,Vb.net,我试图更新“IF-THEN”语句中的sql db,但我得到: ExecuteOnQuery:尚未初始化连接属性 当我运行代码时 Private m_cn As New SqlConnection If oldcost <> newcost Then 'Dim myconnect As New SqlClient.SqlConnection m_cn.ConnectionString = "Data Source=localhost;In

我试图更新“IF-THEN”语句中的sql db,但我得到:

ExecuteOnQuery:尚未初始化连接属性

当我运行代码时

Private m_cn As New SqlConnection
If oldcost <> newcost Then
            'Dim myconnect As New SqlClient.SqlConnection
            m_cn.ConnectionString = "Data Source=localhost;Initial Catalog=tires;Integrated Security=True"
            m_cn.Open()
            Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand()
            'm_cn.Open()
            mycommand.CommandText = "INSERT INTO tire_price_changes (change_date, old_cost, old_retail,new_cost,new_retail,tire_id) VALUES (@change_date, @Nold_cost, @old_retail, @new_cost, @new_retail, @tire_id)"

            Try
                mycommand.Parameters.Add("@change_date", SqlDbType.Date).Value = tiredate
                mycommand.Parameters.Add("@old_cost", SqlDbType.NVarChar).Value = oldcost
                mycommand.Parameters.Add("@old_retail", SqlDbType.VarChar).Value = oldretail
                mycommand.Parameters.Add("@new_cost", SqlDbType.VarChar).Value = newcost
                mycommand.Parameters.Add("@new_retail", SqlDbType.NVarChar).Value = newretail
                mycommand.Parameters.Add("@tire_id", SqlDbType.NVarChar).Value = m_introwposition
                mycommand.ExecuteNonQuery()
                MsgBox("Success")
            Catch ex As System.Data.SqlClient.SqlException
                MsgBox(ex.Message)
            End Try
        End If
Private m_cn作为新的SqlConnection
如果旧成本新成本那么
'Dim myconnect作为新的SqlClient.SqlConnection
m_cn.ConnectionString=“数据源=本地主机;初始目录=轮胎;集成安全性=真”
中国公开发行()
Dim mycommand As SqlClient.SqlCommand=New SqlClient.SqlCommand()
"m_cn.Open()
mycommand.CommandText=“插入轮胎价格变更(变更日期、旧成本、旧零售、新成本、新零售、轮胎id)值(@change\u日期、@Nold\u成本、@old\u零售、@new\u成本、@new\u零售、@tire\u id)”
尝试
mycommand.Parameters.Add(“@change\u date”,SqlDbType.date)。Value=tiredate
mycommand.Parameters.Add(“@old_cost”,SqlDbType.NVarChar)。Value=oldcost
mycommand.Parameters.Add(“@old\u retail”,SqlDbType.VarChar).Value=oldretail
mycommand.Parameters.Add(“@new_-cost”,SqlDbType.VarChar)。Value=newcost
mycommand.Parameters.Add(“@new\u retail”,SqlDbType.NVarChar).Value=newretail
mycommand.Parameters.Add(“@tire\u id”,SqlDbType.NVarChar).Value=m\u introwposition
mycommand.ExecuteOnQuery()
MsgBox(“成功”)
捕获ex为System.Data.SqlClient.SqlException
MsgBox(例如消息)
结束尝试
如果结束

它不会以这种方式初始化。手动设置myCommand.Connection属性或使用CreateCommand创建命令:

myCommand = m_cn.CreateCommand();

您没有连接命令和连接

执行前请尝试以下操作:

mycommand.Connection = m_cn;
您还可以要求连接对象为您创建命令对象,在这种情况下,它会自行设置:

Dim mycommand As SqlClient.SqlCommand = Connection.CreateCommand()

此外,在处理完这些对象后,请记住调用
Dispose

您需要将连接附加到命令对象,类似于
mycommand.connection=m_cn
.Ed,这样做很有效。。。谢谢我不知道为什么我的帖子得了-1分(我也不明白:你有一个有针对性的问题和一个代码示例,并且你包含了错误消息。我刚刚给你投了赞成票,看起来你现在对这个问题的看法是积极的:)我会打电话给dispose,现在它正在工作。只是出于好奇,如果我不处理怎么办?随着时间的推移,该应用程序是否会成为内存消耗?我没有足够的经验来通过艰苦的方式学习。。。。再次感谢你的帮助!它将消耗连接,直到垃圾收集器到达它,这取决于您运行此代码的频率/时间可能不够快。默认情况下,你可以在一个.NET应用程序中有100个live SQL Server连接。但这实际上不是重点。您应该注意查看有关您使用的新对象和实现
IDisposable
的任何对象的文档(或可用方法),完成后,您有责任调用
Dispose
。在C#中,您可以使用
using(xxx){…}
构造,但是我不确定VB.NET是否有类似的东西谢谢!学习正确的编码方法而不总是学习困难的方法是很好的。