存储过程无法正常工作 [英] Stored procedure not working

查看:98
本文介绍了存储过程无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我想打电话的程序



私人子展示()
TxtName.Text = Ds.Tables( LEDG)。行(Rc)(名称)。ToString
CmbGrp.Text = Ds.Tables(LEDG)。行(Rc)(Grp)。ToString
TxtAdd1.Text = Ds.Tables(LEDG)。行(Rc)(Add1)。ToString
TxtAdd2.Text = Ds.Tables(LEDG)。行(Rc)(Add2)。ToString
CmbCity.Text = Ds.Tables(LEDG)。行(Rc)(城市)。ToString
TxtDist.Text = Ds.Tables(LEDG)。行(Rc)( Dist)。ToString
TxtPIN.Text = Ds.Tables(LEDG)。Rows(Rc)(Pincode)。ToString
DBState.Text = Ds.Tables(LEDG)。 Rows(Rc)(State)。ToString
TxtEmail.Text = Ds.Tables(LEDG)。Rows(Rc)(Email)。ToString
TxtPhone.Text = Ds.Tables (LEDG)。行(Rc)(固定电话)。ToString
TxtMob.Text = Ds.Tables(LEDG)。行(Rc)(移动)。ToString
TxtVAT .Text = Ds.Tables(LEDG)。行(Rc)(VATNO)。ToString
TxtCST.Text = Ds.Tables(LEDG)。行(Rc) (CSTNO)。ToString
TxtGST.Text = Ds.Tables(LEDG)。行(Rc)(GSTNO)。ToString
TxtPAN.Text = Ds.Tables(LEDG) ).Rows(Rc)(PAN)。ToString
End Sub





这是我的地方称之为



 Private Sub BtnFirst_Click_1(发送者作为对象,e作为EventArgs)处理BtnFirst.Click 
Dim Da As New MySqlDataAdapter
Dim Ds As New DataSet
SqlQuery =Select * from Ledgers
Sqlcommand = New MySqlCommand(SqlQuery,Conn)
count = Sqlcommand.ExecuteScalar
Da.SelectCommand = Sqlcommand
Da.Fill(Ds,LEDG)
Rc = 0
显示()
结束子





得到错误对象引用未设置为对象的实例。



我尝试过:



当我尝试



 Private Sub BtnFirst_Click_1(发件人作为对象, e As EventArgs)处理B. tnFirst.Click 
Dim Da As New MySqlDataAdapter
Dim Ds As New DataSet
SqlQuery =Select * from Ledgers
Sqlcommand = New MySqlCommand(SqlQuery,Conn)
count = Sqlcommand.ExecuteScalar
Da.SelectCommand = Sqlcommand
Da.Fill(Ds,LEDG)
Rc = 0
TxtName.Text = Ds.Tables(LEDG) ).Rows(Rc)(Name)。ToString
CmbGrp.Text = Ds.Tables(LEDG)。Rows(Rc)(Grp)。ToString
TxtAdd1.Text = Ds .Tables(LEDG)。行(Rc)(Add1)。ToString
TxtAdd2.Text = Ds.Tables(LEDG)。行(Rc)(Add2)。ToString
CmbCity.Text = Ds.Tables(LEDG)。行(Rc)(城市)。ToString
TxtDist.Text = Ds.Tables(LEDG)。行(Rc)(Dist) ).ToString
TxtPIN.Text = Ds.Tables(LEDG)。行(Rc)(Pincode)。ToString
DBState.Text = Ds.Tables(LEDG)。行( Rc)(State)。ToString
TxtEmail.Text = Ds.Tables(LEDG)。Rows(Rc)(Email)。ToString
TxtPhone.Text = Ds.Tables(LEDG)。行(Rc)(Landline)。ToString
TxtMob.Text = Ds.Tables(LEDG)。行(Rc)(移动) .ToString
TxtVAT.Text = Ds.Tables(LEDG)。行(Rc)(VATNO)。ToString
TxtCST.Text = Ds.Tables(LEDG)。行(Rc )(CSTNO)。ToString
TxtGST.Text = Ds.Tables(LEDG)。行(Rc)(GSTNO)。ToString
TxtPAN.Text = Ds.Tables(LEDG ).Rows(Rc)(PAN)。ToString
End Sub





一切正常运行
请帮助

解决方案

首先阅读这些文章:

Microsoft .NET中的变量和方法范围 [ ^ ]

Visual Basi中的范围c | Microsoft Docs [ ^ ]



简而言之:在您的情况下对象引用未设置为实例一个对象错误消息说 DS 变量在显示过程中是不可能的,因为已在 tnFirst_Click_1 过程中创建并启动。



您可以通过将数据集作为参数传递到<$来解决此问题c $ c>显示程序(推荐)或在 tnFirst_Click_1 程序之外定义 DS 变量(不推荐)。



 私有  Sub  BtnFirst_Click_1(发件人作为 对象,e  As  EventArgs)句柄 BtnFirst.Click 
Dim Da As MySqlDataAdapter
Dim Ds As DataSet
' 部分启动Ds变量的代码
' ...
' finally:
显示(Ds)
结束 Sub

私有 Sub 显示( ByRef ds As DataSet)
' 您的代码
结束 Sub





详情请见:

如何:控制变量的范围(Visual Basic)| Microsoft Docs [ ^ ]

了解变量的范围 [ ^ ]

Visual Basic中的过程Microsoft Docs [ ^ ]

按值和引用传递参数(Visual Basic)| Microsoft Docs [ ^ ]


嗨声明

 Dim Ds作为新数据集

在课程开始时

当您在函数级别声明数据集时,您无法在函数外部使用该数据集,或者您可以使用此变量的基本编程规则范围



私有子显示(byVal Ds as DataSet)
TxtName.Text = Ds.Tables(LEDG)。行(Rc) (名称)。ToString
CmbGrp.Text = Ds.Tables(LEDG)。行(Rc)(Grp)。ToString
TxtAdd1.Text = Ds.Tables(LEDG) ).Rows(Rc)(Add1)。ToString
TxtAdd2.Text = Ds.Tables(LEDG)。Rows(Rc)(Add2)。ToString
CmbCity.Text = Ds .Tables(LEDG)。行(Rc)(City)。ToString
TxtDist.Text = Ds.Tables(LEDG)。行(Rc)(Dist)。ToString
TxtPIN.T ext = Ds.Tables(LEDG)。行(Rc)(Pincode)。ToString
DBState.Text = Ds.Tables(LEDG)。行(Rc)(状态)。ToString
TxtEmail.Text = Ds.Tables(LEDG)。行(Rc)(电子邮件)。ToString
TxtPhone.Text = Ds.Tables(LEDG)。行(Rc)( 固定电话)。ToString
TxtMob.Text = Ds.Tables(LEDG)。行(Rc)(移动)。ToString
TxtVAT.Text = Ds.Tables(LEDG) .Rows(Rc)(VATNO)。ToString
TxtCST.Text = Ds.Tables(LEDG)。行(Rc)(CSTNO)。ToString
TxtGST.Text = Ds。表(LEDG)。行(Rc)(GSTNO)。ToString
TxtPAN.Text = Ds.Tables(LEDG)。行(Rc)(PAN)。ToString
结束子





私有子BtnFirst_Click_1(发件人为对象,e为EventArgs)处理BtnFirst.Click 
Dim Da As New MySqlDataAdapter
Dim Ds As New DataSet
SqlQuery =Select * from Ledgers
Sqlcommand = New MySqlCommand(SqlQuery,Conn)
count = Sqlcommand.ExecuteScalar
Da.SelectCommand = Sqlcommand
Da.Fill(Ds,LEDG)
Rc = 0
显示(Ds)
结束子


This is procedure I want to call

Private Sub Display()
       TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
       CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
       TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
       TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
       CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
       TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
       TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
       DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
       TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
       TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
       TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
       TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
       TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
       TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
       TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
   End Sub



this is where I call it

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        Display()
End Sub



getting error " object reference not set to an instance of an object".

What I have tried:

When i try

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
        CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
        TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
        TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
        CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
        TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
        TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
        DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
        TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
        TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
        TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
        TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
        TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
        TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
        TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
End Sub



everything is working OK
Please Help

解决方案

You should start by reading these articles:
Variable and Method Scope in Microsoft .NET[^]
Scope in Visual Basic | Microsoft Docs[^]

In a short: in your case object reference not set to an instance of an object error message says that DS variable inside Display procedure is inaccesible, because has been created and initiated inside tnFirst_Click_1 procedure.

You may resolve this by passing dataset as a parameter into Display procedure (recommended) or by defining DS variable outside tnFirst_Click_1 procedure (not recommended).

Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
    Dim Da As New MySqlDataAdapter
    Dim Ds As New DataSet
    'the part of code where Ds variable is initiated    
    '...
    'finally:
    Display(Ds)
End Sub

Private Sub Display(ByRef ds As DataSet)
    'your code here
End Sub



For further details, please see:
How to: Control the Scope of a Variable (Visual Basic) | Microsoft Docs[^]
Understanding the Scope of Variables[^]
Procedures in Visual Basic | Microsoft Docs[^]
Passing Arguments by Value and by Reference (Visual Basic) | Microsoft Docs[^]


Hi Declare

Dim Ds As New DataSet

at start of class
When you declare Dataset at function level then you cant use that dataset out side of the function or you can use like this basic programing rule scope of a variable

Private Sub Display(byVal Ds as DataSet)
       TxtName.Text = Ds.Tables("LEDG").Rows(Rc)("Name").ToString
       CmbGrp.Text = Ds.Tables("LEDG").Rows(Rc)("Grp").ToString
       TxtAdd1.Text = Ds.Tables("LEDG").Rows(Rc)("Add1").ToString
       TxtAdd2.Text = Ds.Tables("LEDG").Rows(Rc)("Add2").ToString
       CmbCity.Text = Ds.Tables("LEDG").Rows(Rc)("City").ToString
       TxtDist.Text = Ds.Tables("LEDG").Rows(Rc)("Dist").ToString
       TxtPIN.Text = Ds.Tables("LEDG").Rows(Rc)("Pincode").ToString
       DBState.Text = Ds.Tables("LEDG").Rows(Rc)("State").ToString
       TxtEmail.Text = Ds.Tables("LEDG").Rows(Rc)("Email").ToString
       TxtPhone.Text = Ds.Tables("LEDG").Rows(Rc)("Landline").ToString
       TxtMob.Text = Ds.Tables("LEDG").Rows(Rc)("Mobile").ToString
       TxtVAT.Text = Ds.Tables("LEDG").Rows(Rc)("VATNO").ToString
       TxtCST.Text = Ds.Tables("LEDG").Rows(Rc)("CSTNO").ToString
       TxtGST.Text = Ds.Tables("LEDG").Rows(Rc)("GSTNO").ToString
       TxtPAN.Text = Ds.Tables("LEDG").Rows(Rc)("PAN").ToString
   End Sub



Private Sub BtnFirst_Click_1(sender As Object, e As EventArgs) Handles BtnFirst.Click
        Dim Da As New MySqlDataAdapter
        Dim Ds As New DataSet
        SqlQuery = "Select * from Ledgers"
        Sqlcommand = New MySqlCommand(SqlQuery, Conn)
        count = Sqlcommand.ExecuteScalar
        Da.SelectCommand = Sqlcommand
        Da.Fill(Ds, "LEDG")
        Rc = 0
        Display(Ds)
End Sub


这篇关于存储过程无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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