终于可以从oracle数据库返回东西了,但怎么得到是这些东东?
想开发一个基于PDA的网站,测试用asp.net连接oracle数据库,想试一下从一个表中取些东西显示出来,上午因为conectstr里一个分号的问题,郁闷了半天,现在终于可以正确往dataset里填东西了,但是我还不是太会用dataadapater.得到东西是这样的。
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
System.Data.DataRowView
数据库名是bak,表名是SEX_DICT,我在asp.net中用了个list控件,整个代码如下,请帮忙指点怎么用list控件把表的内容显示出来。
//数据库连接
string query = "select * from SEX_DICT ";
string myConectiongStr = "server=132.147.0.8;Data Source=bak;
uid=kyb; pwd=boy ";
OracleConnection conn = new OracleConnection(myConectiongStr);
//声明dataset
DataSet myDataSet = new DataSet();
//声明一个dataAdapter
OracleDataAdapter myDateAdapter = new OracleDataAdapter(query, conn);
//打开连接,填充dataset
conn.Open();
int i= myDateAdapter.Fill(myDataSet, "SEX_DICT ");
conn.Close();
//把它显示出来,简单这么绑定可以吗?该怎么显示呢?
MyList.DataSource = myDataSet.Tables[0].DefaultView;
MyList.DataBind();
SEX_DICT描述是
SERIAL_NO
SEX_CODE
SEX_NAME
INPUT_CODE
谢谢大家的指教!
[解决办法]
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html
[解决办法]
注意代码顺序,先绑定在conn.Close();
[解决办法]
Imports System.Data.OracleClient
Imports cBaseService
'Imports System.Data.oracle
Friend Class OracleDB
#Region " 变量 "
Private WithEvents DBConn As OracleConnection
Private WithEvents DbCmd As OracleCommand
Private WithEvents DbExec As OracleCommand
Public Structure ProcCommandParam
Public [Name] As String
Public [DataType] As System.Data.DbType
Public [Value] As Object
Public Sub New(ByVal ParamName As String, Optional ByVal ParamType As System.Data.DbType = DbType.String, Optional ByVal ParamValue As Object = " ")
[Name] = ParamName
[DataType] = ParamType
[Value] = ParamValue
End Sub
Public ReadOnly Property Length() As Int32
Get
Return [Name].Length + [Value].ToString.Length
End Get
End Property
Public Function ToSQLParameter() As OracleParameter
Return New OracleParameter([Name], CType([DataType], SqlDbType), [Value])
End Function
End Structure
#End Region
#Region " 构造函数 "
Public Sub New()
DBConn = New OracleConnection
DbCmd = New OracleCommand
DbExec = New OracleCommand
End Sub
Public Sub Dispose()
If Not DBConn Is Nothing Then DBConn.Close() : DBConn.Dispose()
If Not DbCmd Is Nothing Then DbCmd.Dispose()
If Not DbExec Is Nothing Then DbExec.Dispose()
End Sub
#End Region
#Region " 数据连接 "
' <WebMethod(Description:= "连接数据库 ")> _
Public Function Connect() As Boolean
Try
DBConn.ConnectionString = GetConnectionString()
DBConn.Open()
Return True
Catch ex As Exception
BackError(DBConn.ConnectionString, ex.Message)
Throw ex
Return False
End Try
End Function
' <WebMethod(Description:= "关闭与数据库的连接 ")> _
Public Function DisConnect()
Try
DBConn.Close()
Catch ex As Exception
End Try
End Function
#End Region
#Region " 数据读取、写入方法,对Web用户不公开 "
' <WebMethod(Description:= "执行带有返回值的SQL语句,返回执行语句的第一条记录的第一个字段的值 <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " CommandText 为执行的SQL语句 <BR> " & _
' "返回值: 已转换为字符串的执行结果 <BR> " & _
' " ")> _
Public Function ExecuteCommandWithReturn(ByVal CommandText As String) As String
Dim pReturn As String
If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.CommandType = CommandType.Text
DbCmd.CommandText = CommandText
DbCmd.Connection = DBConn
Try
pReturn = DbCmd.ExecuteScalar() & " "
Return pReturn
Catch ex As OracleException
DisConnect()
BackError(CommandText, ex.Message)
Throw New Exception( "服务器在执行下面的SQL语句时发生错误: " & vbCrLf & CommandText & vbCrLf & vbCrLf & "错误信息: " & vbCrLf & ex.Message)
Catch ex As Exception
DisConnect()
BackError(CommandText, ex.Message)
Throw New Exception( "服务器发生下列错误: " & vbCrLf & ex.Message)
End Try
End Function
' <WebMethod(Description:= "执行带无返回值的SQL语句 <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " CommandText 为执行的SQL语句 <BR> " & _
' " ")> _
Public Sub ExecuteCommand(ByVal CommandText As String)
Try
If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.Connection = DBConn
DbCmd.CommandType = CommandType.Text
DbCmd.CommandText = CommandText
DbCmd.ExecuteNonQuery()
DisConnect()
Catch ex As OracleException
DisConnect()
BackError(CommandText, ex.Message)
Throw New Exception( "服务器在执行下面的SQL语句时发生错误: " & vbCrLf & CommandText & vbCrLf & vbCrLf & "错误信息: " & vbCrLf & ex.Message)
Catch ex As Exception
DisConnect()
BackError(CommandText, ex.Message)
Throw New Exception( "服务器发生下列错误: " & vbCrLf & ex.Message)
End Try
End Sub
' <WebMethod(Description:= "执行带无返回值的存储过程 <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " ProcName 为存储过程名称 <BR> " & _
' " Commands() 存储过程参数数组 <BR> " & _
' " ")> _
Public Sub ExecuteProc(ByVal ProcName As String, ByVal ParamArray Commands() As ProcCommandParam)
Try
If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.Connection = DBConn
DbCmd.CommandType = CommandType.StoredProcedure
DbCmd.CommandText = ProcName
If Commands.Length > 0 Then
Dim i As Integer
For i = 0 To Commands.Length
DbCmd.Parameters.Add(Commands(i).ToSQLParameter)
Next
End If
DbCmd.ExecuteNonQuery()
DisConnect()
Catch ex As OracleException
DisConnect()
BackError(ProcName, ex.Message)
Throw New Exception( "服务器在执行下面的存储过程时发生错误: " & vbCrLf & ProcName & vbCrLf & vbCrLf & "错误信息: " & vbCrLf & ex.Message)
Catch ex As Exception
DisConnect()
BackError(ProcName, ex.Message)
Throw New Exception( "服务器发生下列错误: " & vbCrLf & ex.Message)
End Try
End Sub
' <WebMethod(Description:= "执行存储过程并返回数据集 <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " ProcName 为存储过程名称 <BR> " & _
' " Commands() 存储过程参数数组 <BR> " & _
' "返回值: 数据集 ")> _
Public Function ExecuteProcWithReturn(ByVal ProcName As String, ByVal ParamArray Commands() As ProcCommandParam) As DataSet
Try
If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.Connection = DBConn
DbCmd.CommandType = CommandType.StoredProcedure
DbCmd.CommandText = ProcName
If Commands.Length > 0 Then
Dim i As Integer
For i = 0 To Commands.Length
DbCmd.Parameters.Add(Commands(i).ToSQLParameter)
Next
End If
Dim NewDBAdp As New OracleDataAdapter(DbCmd)
Dim ds As New DataSet( "Proc DataSet ")
Try
NewDBAdp.FillSchema(ds, SchemaType.Source) '带有数据的结构信息
Catch ex As Exception
End Try
NewDBAdp.Fill(ds)
NewDBAdp.Dispose()
DisConnect()
Return ds
Catch ex As OracleException
DisConnect()
BackError(ProcName, ex.Message)
Throw New Exception( "服务器在执行下面的存储过程时发生错误: " & vbCrLf & ProcName & vbCrLf & vbCrLf & "错误信息: " & vbCrLf & ex.Message)
Catch ex As Exception
DisConnect()
BackError(ProcName, ex.Message)
Throw New Exception( "服务器发生下列错误: " & vbCrLf & ex.Message)
End Try
End Function
[解决办法]
' <WebMethod(Description:= "执行一系列相关联的SQL语句,之间用事务处理,如果不成功则全部RollBack; <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " CommandText() 为执行的SQL语句数组(集合) <BR> " & _
' " ")> _
Public Sub TransCommand(ByVal ParamArray CommandText() As String)
Dim str_Rtn As String
Dim i, n As Long
If DBConn.State = ConnectionState.Closed Then Connect()
DbCmd.Connection = DBConn
Dim NewTrans As OracleTransaction = DBConn.BeginTransaction()
DbCmd.CommandType = CommandType.Text
DbCmd.Transaction = NewTrans
Try
n = CommandText.Length - 1
For i = 0 To n
If Trim(CommandText(i) & " ") <> " " Then
DbCmd.CommandText = CommandText(i)
DbCmd.ExecuteNonQuery()
End If
Next
NewTrans.Commit()
DisConnect()
Catch ex As OracleException
'如果失败则返回要执行到的步骤的SQL语句
NewTrans.Rollback()
DisConnect()
BackError(DbCmd.CommandText, ex.Message)
Throw New Exception( "服务器在执行下面的语句时发生错误: " & vbCrLf & CommandText(i) & vbCrLf & vbCrLf & "错误信息: " & vbCrLf & ex.Message)
Catch ex As Exception
'如果失败则返回要执行到的步骤的SQL语句
NewTrans.Rollback()
DisConnect()
BackError(DbCmd.CommandText, ex.Message)
Throw New Exception( "服务器发生下列错误: " & vbCrLf & ex.Message)
End Try
End Sub
' <WebMethod(Description:= "执行一系列SQL语句,并返回数据集 <BR> " & _
' "参 数: SafeCode 为安全校验码 <BR> " & _
' " CommandText() 为执行的SQL语句数组(集合) <BR> " & _
' "返回值: 数据集 ")> _
Public Function GetDataSet(ByVal ParamArray CommandText() As String) As DataSet
If CommandText.Length = 0 Then Return Nothing
Dim DsTmp As New DataSet( "SQL DataSet ")
Try
If DBConn.State = ConnectionState.Closed Then Connect()
Dim i As Integer
For i = 0 To CommandText.Length - 1
Dim NewDBAdp As New OracleDataAdapter(CommandText(i), DBConn)
Dim dtTmp As New DataTable
Try
NewDBAdp.FillSchema(dtTmp, SchemaType.Source) '带有数据的结构信息
For Each dc As DataColumn In dtTmp.PrimaryKey
If (dc.DataType Is GetType(Decimal) Or dc.DataType Is GetType(Int32)) Then
dc.AutoIncrement = True
dc.AutoIncrementSeed = 1
dc.AutoIncrementStep = 1
End If
Next
Catch ex As Exception
End Try
NewDBAdp.Fill(dtTmp)
NewDBAdp.Dispose()
DsTmp.Tables.Add(dtTmp)
Next
DisConnect()
Return DsTmp
Catch ex As Exception
DisConnect()
BackError(DbCmd.CommandText, ex.Message)
Throw ex
End Try
End Function
'获取因执行CommandText的SQL语句所发生的结果集
'参 数: CommandText 为执行的SQL语句数组(集合)
' TabName为数据在Dataset中的表名,与数据库无关
'返回值: 如果返回DataTable数据集则表示执行正常,否则返回Nothing为错误信息
'允许重写
Public Function GetDataTable(ByVal CommandText As String) As DataTable
Dim dt As New DataTable( "SQL DataTable ")
Try
If DBConn.State = ConnectionState.Closed Then Connect()
Dim NewDBAdp As New OracleDataAdapter(CommandText, DBConn)
Try
NewDBAdp.FillSchema(dt, SchemaType.Source) '带有数据的结构信息
For Each dc As DataColumn In dt.PrimaryKey
If (dc.DataType Is GetType(Decimal) Or dc.DataType Is GetType(Int32)) Then
dc.AutoIncrement = True
dc.AutoIncrementSeed = 1
dc.AutoIncrementStep = 1
End If
Next
Catch ex As Exception
End Try
NewDBAdp.Fill(dt)
NewDBAdp.Dispose()
DisConnect()
Return dt
Catch ex As Exception
DisConnect()
BackError(DbCmd.CommandText, ex.Message)
Throw ex
End Try
End Function
'保存多条数据
Public Sub SetDataSet(ByVal CommandText As String, ByVal Dataset As DataSet)
Try
If DBConn.State = ConnectionState.Closed Then Connect()
Dim NewDBAdp As New OracleDataAdapter(CommandText, DBConn)
Dim cb As OracleCommandBuilder = New OracleCommandBuilder(NewDBAdp)
NewDBAdp.InsertCommand = cb.GetInsertCommand
NewDBAdp.DeleteCommand = cb.GetDeleteCommand
NewDBAdp.UpdateCommand = cb.GetUpdateCommand
NewDBAdp.Update(Dataset.Tables(0))
NewDBAdp.Dispose()
DisConnect()
Catch ex As Exception
DisConnect()
BackError(DbCmd.CommandText, ex.Message)
Throw ex
End Try
End Sub
'保存Bug信息
Private Sub BackError(ByVal ErrLine As String, ByVal ErrCode As String)
End Sub
#End Region
#Region " 从Config.Config中读取系统数据库的连接信息 "
Private Function GetConnectionString() As String
Dim Cfg As New dbConfig
Cfg.ServerType = enuServerType.Oracle
Dim strRet As String = Cfg.GetConnectionString
Cfg.Dispose()
Return strRet
End Function
#End Region
#Region " 安全用户验证,保证是本系统内部使用 "
Private Function SafeUser(ByVal SafeCode As String) As Boolean
Return cBaseService.HashCode.DataSafeDecVerify(SafeCode)
End Function
#End Region
End Class
[解决办法]
VB.NET的,稍加修改就可以做成C#.NET的了