2014-09-20 62 views
1

作为一个新手,我越来越老试图找出如何返回一个字符串值从一个SQL选择命令与VB代码背后。我有的程序如下。基本上我想要做的就是提取表格BuildFields中的DisplayName字段中的值(带有WHERE条件),并将其放置到formview模板中的标签的文本字段中。看起来应该不难,我确信我错过了一些东西。有没有人有任何想法或看到我做错了什么?这不会返回任何东西。谢谢。从sql select命令返回字符串值vb.net代码背后

Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles FormView1.DataBound 

    Dim dt As New DataTable() 
    Dim conCString As String = ConfigurationManager.ConnectionStrings("conCString").ConnectionString 
    Dim lbl As Label = FormView1.FindControl("Label1") 
    Dim sqlConnection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("conCString").ConnectionString) 
    Dim cmd As New SqlCommand 

    cmd.CommandText = "SELECT [DisplayName] FROM [BuildFields] WHERE ([TableID] = N'Capacitors') AND (ColumnID = N'UserField01') ORDER BY [ColumnID]" 
    cmd.CommandType = CommandType.Text 
    cmd.Connection = SqlConnection 

    Try 
     SqlConnection.Open() 
     Dim result As String 

     result = cmd.ExecuteScalar() 

     lbl.Text = result 

     sqlConnection.Close() 
    Catch ex As Exception 

    End Try 

End Sub 
+0

可能的重复http://stackoverflow.com/questions/10856686/need-to-get-value-from-sql-query – 2014-09-20 16:15:03

回答

0

打开Option strictON现在。为什么?如果/当ExecuteScalar返回DBNull时会发生什么?

我敢打赌,如果你删除try-catch块,那么你会得到这样的错误信息:

“”类型的未处理的异常出现在Microsoft.VisualBasic.dll中

这里是你的代码应该如何看起来像:

Dim result As Object 
result = cmd.ExecuteScalar() 
lbl.Text = If((TypeOf result Is String), CType(result, String), "(null)") 

你也应该使用打交道时的Using关键字一次性物品。

Using sqlConnection As New SqlConnection(ConfigurationManager.ConnectionStrings("conCString").ConnectionString) 
    Using cmd As New SqlCommand() 
     'Code goes here... 
    End Using 
End Using 

而且你永远不应该吞下这样的异常。始终采取适当的行动和/或重新抛出错误。

Catch ex As Exception 
    'Do something or else: 
    Throw 
End Try