如何通过VB.net中的另一个GUID列选择GUID列?我的选择查询不起作用

时间:2015-08-17 10:08:34

标签: asp.net sql-server vb.net select guid

我是编程新手,有机会在另一个开发人员项目中工作和维护。

该项目是使用ASP.Net Vb.Net和SQl Server构建的。

我正在尝试从表中选择主键ID(实际上是GUID)。

SQID = Core.DB.GetString("SELECT id FROM SQC WHERE sid = " & sid)

在表SQC中,主键是id,它是guid,而sid也是guid,它是另一个表的主键。

我以前的开发人员开发了代码来选择字符串变量GetString函数,其中GetString是

        Shared Function GetString(ByVal selectQueryText As String, ByVal ParamArray params As SqlParameter()) As String
        Dim dt As DataTable = Nothing
        Try
            dt = GetData(selectQueryText, CommandType.Text, params)
            If dt.Rows.Count = 0 Then
                Return ""
            Else
                If TypeOf dt.Rows(0)(0) Is DBNull Then
                    Return ""
                Else
                    Return CStr(dt.Rows(0)(0))
                End If
            End If
        Finally
            If dt IsNot Nothing Then dt.Dispose()
        End Try
    End Function

当我调试代码时,我的进程进入GetString函数,从Get String进入GetData函数

Shared Function GetData(ByVal selectCommandText As String, ByVal selectCommandType As CommandType, ByVal ParamArray params As SqlParameter()) As DataTable
        Dim conn As SqlConnection = Nothing
        Try
            conn = GetOpenSqlConnection()

            Return GetData(conn, selectCommandText, selectCommandType, params)
        Finally
            If conn IsNot Nothing Then conn.Dispose()
        End Try
    End Function

    Shared Function GetData(ByVal conn As SqlConnection, ByVal selectCommandText As String, ByVal selectCommandType As CommandType, ByVal ParamArray params As SqlParameter()) As DataTable
        If conn Is Nothing Then Return GetData(selectCommandText, selectCommandType, params)

        Dim sa As SqlDataAdapter = Nothing
        Try
            sa = New SqlDataAdapter(selectCommandText, conn)
            sa.SelectCommand.CommandType = selectCommandType

            Dim dt As New DataTable
            Try
                For Each param As SqlParameter In params
                    sa.SelectCommand.Parameters.Add(param)
                Next

                sa.Fill(dt)

                Return dt
            Catch ex As Exception
                dt.Dispose()
                Throw ex
            End Try
        Finally
            If sa IsNot Nothing Then sa.Dispose()
        End Try
    End Function

在exeption的Try Catch区域处理代码中断并抛出异常错误。它在' a379' 附近说语法不正确。这是sid(GUID)的第一部分。我的意思是sid值 9417A379-6371-432F-9DA5-BCFC46DD95A1

我不知道如何处理这个问题。我想从SQC表中选择id并将其存储在变量中。

我正在寻找你的意见和建议。因为我是编程世界的新手,请指出我的错误。

由于

1 个答案:

答案 0 :(得分:2)

看起来您的问题可以像以下一样修复:

SQID = Core.DB.GetString("SELECT id FROM SQC WHERE sid = '" & sid & "'")

但是你应该知道这种代码风格对SQL注入是开放的,你可能想看看你的查询参数化的方法(即不要把这个项目中的内容当作好的做法)。