SQL列不存在错误

时间:2014-01-23 17:52:57

标签: sql sql-server vb.net sql-server-2008 login

好吧,基本上我今天早些时候就问过这个问题,但我们没有找到问题的根源,很多猜测都让解决方案蒙上阴影。我有一个程序,目前需要检查来自RegUserName.Text的用户输入'Gamer-Tag',并将其与存储在PersonsA数据库中的SQL表Members_Details上的Gamer-Tags进行比较

当代码运行时,我收到以下错误;

  

发生了'System.ArgumentException'类型的未处理异常   System.Data.dll中

     

附加信息:列'Gamer_Tag'不属于表格   PersonsA。

然而,Gamer-Tag IS在表中;这是表格中的第二列。服务器是MS SQL Server,当我使用'SQL Server Management Studio'时,我可以清楚地看到表和&列。从那里开始,与Gamer_Tag列相关的所有SQL代码都可以完美地工作,所以它肯定在数据库中。

这是按下按钮时调用的代码。此代码使用错误“调用”函数。

Dim dbManager As New DatabaseManager() 'My Class Where The Functions Are

        If dbManager.CheckGamerTagisMember(RegUserName.Text) Then
            MsgBox("Gamer-Tag is NOT A Member.")
            GoTo Ender
        Else
            MsgBox("Gamer-Tag is A Member.")
            GoTo Ender
        End If

这是包含错误的函数;

 Public Function CheckGamerTagisMember(ByVal gamertag As String) As Boolean

Connection = New SqlConnection("Data Source =" & My.Settings.ServerIP & ";Initial Catalog=Members_Details;Integrated Security=False;User=" & My.Settings.UserName & ";Password=*******;")
            Connection.Open()

Dim gamertagDatSet As New DataSet()

usersDataAdapter.FillSchema(gamertagDatSet, SchemaType.Source, "PersonsA")

usersDataAdapter.Fill(gamertagDatSet, "PersonsA")

Dim table As DataTable = gamertagDatSet.Tables("PersonsA")

        For i As Integer = 0 To table.Rows.Count - 1
            Dim storedgamertag As String = table.Rows(i)("Gamer_Tag").ToString.ToString '<-------- ERROR 

            If (storedgamertag = gamertag) Then
                gamertagDatSet.Dispose()
                Connection.Close()
                Return True
            End If
        Next

        gamertagDatSet.Dispose()
        Connection.Close()
        Return False
    End Function

什么可能导致这个问题?我已经检查了明显的拼写和间距,防火墙已关闭,而Column在那里毫无疑问。功能代码改编自我的SQL登录功能,它没有任何问题,所以我很困惑为什么这不起作用。

以下是MS SQL Server Management Studio的屏幕截图,其中显示了PersonsA表列。

enter image description here

现在真的很令人沮丧。

1 个答案:

答案 0 :(得分:1)

一些可能的原因:

  1. 您的用户实际上已被拒绝查看该列。这可以通过以下简单的方式实现:

    DENY SELECT ON dbo.PersonsA(Gamer_Tag) TO your_user;
    
  2. 有多个PersonsA表,您在代码中访问的表实际上与dbo不同。这就是为什么在创建或引用对象时始终始终始终指定模式的原因。总是。 Read this post for more info

  3. 您的代码连接到不同的服务器,不同的数据库或与Management Studio相同的数据库的不同副本。 (后者可能在使用SQL Express和User Instance/AttachDbFileName设置时发生,我可以看到您的代码未使用,但我不知道您是否从Management Studio连接到用户实例。)