Sql server ExecuteOnQuery:尚未初始化连接属性。即使连接打开
我试图更新“IF-THEN”语句中的sql db,但我得到: 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
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是否有类似的东西谢谢!学习正确的编码方法而不总是学习困难的方法是很好的。