Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 ADO.Net无法识别Select语句中的列_Sql_Vb.net_Ado.net - Fatal编程技术网

Sql ADO.Net无法识别Select语句中的列

Sql ADO.Net无法识别Select语句中的列,sql,vb.net,ado.net,Sql,Vb.net,Ado.net,我有一个查询在TOAD中执行得很好,但是当使用ADO.Net DataReader或DataAdapter/DataSet返回结果时,它无法识别select语句中的列。请参阅下面的查询。。。所讨论的列的数据来自动态表、子选择或您所称的任何内容。我不明白为什么这在.Net中是个问题: Dim sql As String = String.Format("select bu.row_id, bu.name, selectedOrgs.bu_id as selectedOrg " _

我有一个查询在TOAD中执行得很好,但是当使用ADO.Net DataReader或DataAdapter/DataSet返回结果时,它无法识别select语句中的列。请参阅下面的查询。。。所讨论的列的数据来自动态表、子选择或您所称的任何内容。我不明白为什么这在.Net中是个问题:

Dim sql As String = String.Format("select bu.row_id, bu.name, selectedOrgs.bu_id as selectedOrg " _
                & " FROM SIEBEL.s_prod_int_bu pb " _
                & " INNER JOIN SIEBEL.s_bu bu on pb.bu_id = bu.row_id " _
                & " LEFT OUTER JOIN (select bu_id " _
                       & " FROM SIEBEL.s_lit_bu " _
                       & " WHERE lit_id = ?) selectedOrgs on selectedOrgs.bu_id = bu.row_id " _
                & " WHERE pb.prod_int_id in ('{0}') " _
                & " ORDER BY bu.name ", String.Join("','", ids.ToArray()))

            'We also need to add a parameter
            cmd.Parameters.AddWithValue("", resourceID)
我有一个OdbcCommand对象“cmd”和一个OdbcDataReader“dr”。我正在像往常一样初始化ObcDataReader:dr=cmd.ExecuteReader()。但是在通过记录的循环中(见下文),从上面的SQL中检索“selectedOrg”列时,代码崩溃(索引超出范围异常):

我不认为这应该爆炸,因为SQL在TOAD中正确返回,并且.Net应该将此列视为普通列,对吗?我尝试用OdbcDataAdapter/DataSet组合替换OdbcDataReader,结果它在同一区域爆炸。事实上,在Studio的“监视”窗口中,如果我执行以下操作:ds.Tables(0).Columns.Count,则显示我只有2列。(杰瑞·宋飞配音:这是怎么回事?)

包含堆栈跟踪信息的异常详细信息:

System.IndexOutOfRangeException 例外:没有 信息:selectedOrg 资料来源:System.Data StackTrace:at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(字符串fieldName) 位于System.Data.Odbc.OdbcDataReader.GetOrdinal(字符串值) 位于System.Data.Odbc.OdbcDataReader.get_项(字符串值) 在中的MyNameSpace1.MyProject.MyClass.MyMethod(列出`1个ID,字符串resourceID) C:\Documents and Settings\my\u username\my Documents\MyProject\MyClass.vb:第1088行

谢谢你的帮助


安迪

编辑:添加堆栈跟踪后

@安迪,果然。。。该错误意味着您的selectedOrg列未被识别为有效列。代码中没有明显的错误。但这里有一些东西可以尝试

更改此行

bu.Selected = Not IsDBNull(dr.Item("selectedOrg"))
。。。对此

bu.Selected = Not IsDBNull(dr("selectedOrg"))

这在过去对我很有效。

编辑:添加堆栈跟踪后

@安迪,果然。。。该错误意味着您的selectedOrg列未被识别为有效列。代码中没有明显的错误。但这里有一些东西可以尝试

更改此行

bu.Selected = Not IsDBNull(dr.Item("selectedOrg"))
。。。对此

bu.Selected = Not IsDBNull(dr("selectedOrg"))

这在过去对我很管用。

尝试删除所选rgs.bu_id列的“as”指示符。我认为Oracle不使用它,这可能会导致ODBC转换器阻塞


'selectedOrgs.bu_id为selectedOrg'



“selectedOrgs.bu_id selectedOrg”

尝试删除selectedOrgs.bu_id列的“as”指示符。我认为Oracle不使用它,这可能会导致ODBC转换器阻塞


'selectedOrgs.bu_id为selectedOrg'


“selectedOrgs.bu_id selectedOrg”

我最终删除了SQL语句的“左外连接(select…)部分,并一个接一个地执行了两条语句。我猜这是System.Data.Odbc名称空间中的一个错误。不确定这是发生在System.Data.SqlClient还是System.Data.OracleClient中

谢谢你的回复

Andy

我最终删除了SQL语句的“左外连接(select…)”部分,然后一个接一个地执行了两条语句。我猜这是System.Data.Odbc名称空间中的一个错误。不确定这是发生在System.Data.SqlClient还是System.Data.OracleClient中

谢谢你的回复


安迪

谢谢你的回复-问题不在IsDbNull()上。。。在Watch窗口中,如果我尝试查看dr.Item(“selectedOrg”),它会给我一条类似这样的消息:索引超出范围异常。我很快就会收到完整的异常消息。感谢您的回复-问题不在IsDbNull()上。。。在Watch窗口中,如果我尝试查看dr.Item(“selectedOrg”),它会给我一条类似这样的消息:索引超出范围异常。我很快就会收到完整的异常消息。感谢您的回复,但不是这样-我们在其他地方成功地使用了“as”作为字段别名。好的,然后看看变量“sql”的字符串。拉取“sub-select”语句,运行它以验证它是否返回了某些内容。感谢您的回复,但不是这样-我们在其他地方成功地使用了“as”作为字段别名。好的,然后查看变量“sql”的字符串。拉取“sub-select”语句,并运行它以验证它是否返回了某些内容。