获取错误“对象引用未设置为对象的实例”。 ,请有人帮助我。 [英] Getting error "object reference is not set to an instance of an object" , please anyone help me.

查看:65
本文介绍了获取错误“对象引用未设置为对象的实例”。 ,请有人帮助我。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

运行我的代码时遇到此错误。请帮助我。



我有两个连接(conl和conr)

使用sql dataadapter和dataset从conl.dbo中选择数据。 txnenrollment并将其插入到conr.dbo.txnenrollment。

无法理解错误在哪里。



我尝试了什么:



while running my code getting this error. Please help me.

I have two connection (conl and conr)
using sql dataadapter and dataset to select data from conl.dbo.txnenrollment and insert it into conr.dbo.txnenrollment.
Unable to understand where is the error.

What I have tried:

Dim conr As String = ("Data Source=MOONLOADER\MSSQLSERVER2005;Initial Catalog=SSBYM;User ID=sa;Password=sasa")
    Private Sub btnupload_Click(sender As Object, e As RoutedEventArgs) Handles btnupload.Click
        Try
            sqlcon = New SqlConnection(conr)
            sqlcon = New SqlConnection(conl)
            Dim da As New SqlDataAdapter()
            Dim ds As New DataSet()
            sqlcon.Open()
            da.SelectCommand.Connection = New SqlConnection(conl)
            da.SelectCommand = New SqlCommand("select * from dbo.TxnEnrollment where URN not in (select URN from dbo.URN)")
            da.Fill(ds)
            da.InsertCommand.Connection = New SqlConnection(conr)
            da.InsertCommand = New SqlCommand("insert into dbo.TxnEnrollment where URN not in (select URN from dbo.TxnEnrollment)")
            cmd.Parameters.Clear()
            sqlcon.Close()
            MessageBox.Show("Uploaded Successfully")
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())

        End Try


    End Sub
End Class

推荐答案

Quote:

我有两个连接(conl和conr)

I have two connection (conl and conr)

不,你只有一个。

No, you have only one.

sqlcon = New SqlConnection(conr)
sqlcon = New SqlConnection(conl)

你的第二个构造函数调用会覆盖前一个,所以 sqlcon 始终使用 conl 连接字符串指向实例。然后你继续用这条线让它更糟糕,

Your second constructor call overrides the previous one, so sqlcon always points to the instance with conl connection string. And you go ahead and make it even worse with this line,

da.SelectCommand.Connection = New SqlConnection(conl)

现在你创建一个新的实例,并将其传递给连接属性 - 这可能会导致内存泄漏。不只是,在这里你再次这样做,

Now you create a new instance, and pass that to the Connection property—this could lead to memory leaks. Not just that, here you do that again,

da.InsertCommand.Connection = New SqlConnection(conr)

虽然很不清楚,这是哪里 cmd 来自?

And although very unclear, where does this cmd come from?

cmd.Parameters.Clear()

这可能是原因找到空指针的位置,以及引发的异常。您可以查看,

This might be the reason where the null pointer is found, and the exception being raised. You can check against,

' Excuse my illiteracy in VB.NET
If cmd IsNot Nothing Then
    cmd.Parameters.Clear()
End If

这可能能够克服此代码中的错误,但您将来也会遇到类似的错误,所以我建议,而不是修复这个错误 - 重要的是 - 请学习一些数据库开发策略,以及如何在过程中重用对象。



请阅读我的文章如何将SQL数据库连接到你的C#程序,初学者的教程 [ ^ ],它可能会让你知道如何SQL Server数据库将在.NET中编程,该文章在C#中,您可以将其与VB.NET联系起来。



另外,作为奖励,我可以告诉你一些关于你的代码的事情,像这样重写它,

This might be able to overcome the error in this code, but you will stumble upon similar errors in future too, so please I recommend, instead of fixing this error—as important it might be—please learn some database strategies of development, and how objects are reused in the process.

Please read my article on this, How to connect SQL Database to your C# program, beginner's tutorial[^], it might give you an idea of how SQL Server databases are to be programmed in .NET, that article is in C#, you can relate it with VB.NET.

Also, as a bonus, I can tell you a few more things about your code, rewrite it like this,

' Create instances; ignore Dim if you have fields with these names
Dim sqlconr As SqlConnection = New SqlConnection(conr)
Dim sqlconl As SqlConnection = New SqlConnection(conl)

Dim da As New SqlDataAdapter()
Dim ds As New DataSet()

' Open connections
sqlconr.Open()
sqlconl.Open()

' Now connect connections with commands; reuse the existing ones
da.SelectCommand.Connection = sqlconl
da.SelectCommand = New SqlCommand("select * from dbo.TxnEnrollment where URN not in (select URN from dbo.URN)")
da.Fill(ds)
da.InsertCommand.Connection = sqlconr

' I would comment this
' cmd.Parameters.Clear() 

' End with
sqlconr.Close()
sqlconl.Close()

这可能是更好的方法,但仍然不清楚你真正需要什么。 : - )

This might be better approach, but still it is unclear as to what you really need. :-)


这是我们遇到的最常见问题之一,也是我们最不能回答的问题,但你最有能力回答自己。



让我解释一下错误的含义:你试图使用变量,属性或方法返回值,但它包含null - 这意味着没有实例变量中的一个类。

它有点像一个口袋:你的衬衫上有一个口袋,用来握笔。如果你进入口袋并发现那里没有笔,你就不能在一张纸上签名 - 如果你尝试的话,你会得到非常有趣的外观!空口袋给你一个空值(这里没有笔!)所以你不能做任何你检索笔通常做的事情。它为什么空?这就是问题 - 可能是你今天早上离开家时忘了拿起你的笔,或者你昨晚把它拿到昨天的衬衫口袋里时可能会把笔留下来。



我们无法分辨,因为我们不在那里,更重要的是,我们甚至看不到你的衬衫,更不用说口袋里的东西了!



回到计算机,你做了同样的事情,不知何故 - 我们看不到你的代码,更不用说运行它了,找不到包含null的东西。

但是你可以 - 而Visual Studio将在这里帮助你。在调试器中运行您的程序,当它失败时,VS将向您显示它发现问题的行。然后,您可以开始查看它的各个部分,以查看哪个值为null,并开始回顾代码以找出原因。因此,在包含错误行的方法的开头放置一个断点,然后从头再次运行程序。这一次,VS会在错误发生前停止,让你通过查看代码来查看你的价值来检查发生了什么。



但我们做不到那 - 我们没有您的代码,如果我们拥有它,我们不知道如何使用它,我们没有您的数据。所以试试吧 - 看看你能找到多少信息!
This is one of the most common problems we get asked, and it's also the one we are least equipped to answer, but you are most equipped to answer yourself.

Let me just explain what the error means: You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterdays shirt when you took it off last night.

We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!

Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
But you can - and Visual Studio will help you here. Run your program in the debugger and when it fails, VS will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, VS will stop before the error, and let you examine what is going on by stepping through the code looking at your values.

But we can't do that - we don't have your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out!


这篇关于获取错误“对象引用未设置为对象的实例”。 ,请有人帮助我。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆