【发布时间】:2013-03-29 14:53:40
【问题描述】:
当我在 Oracle 中运行以下 SQL 时,列默认值报告正确(“测试”)。当我在 .NET 中运行相同的 SQL 时,报告的默认值为 NULL:
SELECT column_name, data_default FROM user_tab_columns WHERE table_name='MYTABLENAME'
有问题的列是 Varchar2。我还测试了一个数字列 - 同样的问题。
数据库版本是 Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
.NET 连接器是 ODP.NET
操作系统是 Windows 7 / 64
我从 all_tab_columns 得到相同的结果(NULL)
.NET 代码:
Dim provider As DbProviderFactory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client")
Using connection As DbConnection = provider.CreateConnection
connection.ConnectionString = "Data Source=localhost; User Id=userid; Password=password"
connection.Open
Using dt As New DataTable
Using command As DbCommand = provider.CreateCommand
command.CommandText = "SELECT column_name, data_default FROM user_tab_columns WHERE table_name='MYTABLENAME'"
command.Connection = connection
Using da As DbDataAdapter = provider.CreateDataAdapter
da.SelectCommand = command
da.Fill(dt)
End Using
End Using
For Each row As DataRow in dt.Rows
Response.Write(row("COLUMN_NAME") & " " & row("DATA_DEFAULT") & "<br>")
Next
End Using
End Using
【问题讨论】:
-
你在这两种情况下都以同一个用户登录吗?
-
@BrankoDimitrijevic 是的
-
你能发布你的 .NET 代码吗? Oracle 查询很好,所以问题一定存在。
-
@EdGibbs .NET 代码添加
-
嗯,这看起来很可靠。我看到的唯一奇怪的是这一行:
Using command。我主要使用 C#,所以我的 VB.NET 很糟糕,但是在 C# 中,你应该在using构造中实例化变量 - 你不应该提前实例化它并将实例变量提供给Using为你已经完成了。出于诊断目的可以尝试几件事:(1) 看看如果将查询的WHERE子句从WHERE table_name='MYTABLENAME'更改为WHERE ROWNUM < 10会发生什么。 (2) 如果去掉Using command包装器会发生什么?