Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询未在VB.NET中运行_Sql_Sql Server_Vb.net - Fatal编程技术网

SQL查询未在VB.NET中运行

SQL查询未在VB.NET中运行,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我对VB.NET比较熟悉,我试图在VB.NET中执行SQL查询,但在输出时不显示任何值。你能帮我找出哪里出了问题吗 Dim sConnectionString As String _ = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX" Dim objConn As New SqlConnection(sConnectionString) objConn.Ope

我对VB.NET比较熟悉,我试图在VB.NET中执行SQL查询,但在输出时不显示任何值。你能帮我找出哪里出了问题吗

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"

    Dim objConn As New SqlConnection(sConnectionString)
    objConn.Open()

    Dim sw ,readerObj
    Dim sSQL As String = "select top 1  " & sw & " = e.import  from tblrelcoms r , [beant].[dbo].tblequipments e where r.IDEquipment = e.IDEquipment"
    Using readerObj As SqlClient.SqlDataReader = cmdObj.ExecuteReader
    Dim objCmd As New SqlCommand(sSQL, objConn)
    objCmd.ExecuteNonQuery()

    TextBox1.Text = sw.ToString()

您所面临的问题是,您不能仅仅将一个变量连接到SQL中,并期望它在SQL执行后得到更新

ExecuteScalar可能是实现您想要的最简单的方法:

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"
    
Dim sSQL as string = "SELECT TOP 1 e.import  " _
                    "FROM   tblrelcoms r " & _
                    "       INNER JOIN [beant].[dbo].tblequipments e " & _
                    "           ON r.IDEquipment = e.IDEquipment " & _
                    "ORDER BY e.Import;"
                    
Using connection = new SqlConnection(sConnectionString)
    Using command = New SqlCommand(sSQL, connection)
        
        connection.Open()
        TextBox1.Text = command.ExecuteScalar().ToString()
        
    End Using
End Using
如果您需要多个列,则可以使用数据读取器:

Dim sConnectionString As String _
    = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"
    
Dim sSQL as string = "SELECT TOP 1 e.import  " _
                    "FROM   tblrelcoms r " & _
                    "       INNER JOIN [beant].[dbo].tblequipments e " & _
                    "           ON r.IDEquipment = e.IDEquipment " & _
                    "ORDER BY e.Import;"
                    
Using connection = new SqlConnection(sConnectionString)
    Using command = New SqlCommand(sSQL, connection)
        
        connection.Open()
        Using reader = command.ExecuteReader()
        
            If reader.Read()
                TextBox1.Text = reader.GetString(0)
            End If
        End Using
        
    End Using
End Using
我也做了一些其他的改变

  • 使用块添加了
    ,以确保正确处置
    IDisposable
    对象
  • 将sql联接语法从ANSI 89隐式联接更新为ANSI 92显式联接,因为名称表明您使用的语法已过期24年。开始使用新语法有很多原因,本文对此进行了详细介绍:
  • 在sql中添加了一个
    orderby
    子句
    TOP 1
    如果没有order by,将给出不确定的结果(除非您只有一条记录,在这种情况下TOP 1是多余的)
  • 一个更复杂的解决方案是使用输出参数,这将起作用,而且似乎更符合您最初试图实现的目标,但在这种情况下(我认为)是过分的:


    *请原谅任何语法错误,我已经多年没有使用VB.Net了,下面可能会有一些c#怪癖,比如我记不起你是否不必为无参数方法使用括号,或者如果你不能。。。希望有足够的基本结构让您开始

    您遇到的问题是,您不能将变量连接到SQL中,并期望它在SQL执行后得到更新

    ExecuteScalar可能是实现您想要的最简单的方法:

    Dim sConnectionString As String _
        = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"
        
    Dim sSQL as string = "SELECT TOP 1 e.import  " _
                        "FROM   tblrelcoms r " & _
                        "       INNER JOIN [beant].[dbo].tblequipments e " & _
                        "           ON r.IDEquipment = e.IDEquipment " & _
                        "ORDER BY e.Import;"
                        
    Using connection = new SqlConnection(sConnectionString)
        Using command = New SqlCommand(sSQL, connection)
            
            connection.Open()
            TextBox1.Text = command.ExecuteScalar().ToString()
            
        End Using
    End Using
    
    如果您需要多个列,则可以使用数据读取器:

    Dim sConnectionString As String _
        = "User ID=XXX ;Password=XXX;Initial Catalog=gemXXX;Data Source=SCRBAMSDKBXXXXXX"
        
    Dim sSQL as string = "SELECT TOP 1 e.import  " _
                        "FROM   tblrelcoms r " & _
                        "       INNER JOIN [beant].[dbo].tblequipments e " & _
                        "           ON r.IDEquipment = e.IDEquipment " & _
                        "ORDER BY e.Import;"
                        
    Using connection = new SqlConnection(sConnectionString)
        Using command = New SqlCommand(sSQL, connection)
            
            connection.Open()
            Using reader = command.ExecuteReader()
            
                If reader.Read()
                    TextBox1.Text = reader.GetString(0)
                End If
            End Using
            
        End Using
    End Using
    
    我也做了一些其他的改变

  • 使用块添加了
    ,以确保正确处置
    IDisposable
    对象
  • 将sql联接语法从ANSI 89隐式联接更新为ANSI 92显式联接,因为名称表明您使用的语法已过期24年。开始使用新语法有很多原因,本文对此进行了详细介绍:
  • 在sql中添加了一个
    orderby
    子句
    TOP 1
    如果没有order by,将给出不确定的结果(除非您只有一条记录,在这种情况下TOP 1是多余的)
  • 一个更复杂的解决方案是使用输出参数,这将起作用,而且似乎更符合您最初试图实现的目标,但在这种情况下(我认为)是过分的:


    *请原谅任何语法错误,我已经多年没有使用VB.Net了,下面可能会有一些c#怪癖,比如我记不起你是否不必为无参数方法使用括号,或者如果你不能。。。希望有足够的基本结构让您开始

    您的var
    sw
    ,您不会给它任何值…打开用于执行不返回任何数据的查询的选项StrightExecuteNonQuery。它用于执行sql语句,如update、insert、delete等。ok…但是如何在VB.NET变量中存储sql查询变量的值如果readerObj.HasRows,那么readerObj.read()TextBox1.Text=rdr(“yourcolumnname”)诸如此类?您的var
    sw
    ,您不给它任何值…启用用于执行不返回任何数据的查询的选项StrightExecuteNonQuery。它用于执行sql语句,如update、insert、delete等。ok…但是如何在VB.NET变量中存储sql查询变量的值如果readerObj.HasRows,那么readerObj.read()TextBox1.Text=rdr(“yourcolumnname”)之类的语句?很好的例子,这一个将适用于OP!感谢您实际使用
    语句,有太多次我看不到这一点…很好的例子,这一个将适用于OP!感谢您实际使用
    语句,有太多次我看不到这一点。。。