从字符串“SELECT * FROM DB”到“Integer”类型的转换无效

时间:2013-08-01 09:38:55

标签: asp.net sql vb.net oracle visual-studio-2012

我是Visual Studio和asp.net with vb的新手,并且一直在尝试破解以下代码,在vb中运行一个简单的sql查询,以html格式显示。

代码:

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes 
Imports System.Data.Odbc
Imports Microsoft.SqlServer.Server
Imports System.Data.OleDb
Imports System.Data.OleDb.OleDbCommand
Imports Oracle.DataAccess.Client

Public Class WebForm1
Inherits System.Web.UI.Page

Private oradb = "Data Source=(DESCRIPTION=" _
   + "(ADDRESS=(PROTOCOL=TCP)(HOST=###.###.###.###)(PORT=####))" _
   + "(CONNECT_DATA=(SERVICE_NAME=#)));" _
   + "User Id=user;Password=pwrd;"

Dim conn As New OracleConnection(oradb.ToString)
Dim sql As String = "SELECT * FROM Db WHERE CLMN = 'Y'"
Dim cmd As New OracleCommand(sql, conn)
Dim dr As OracleDataReader

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles      Me.Load
    MySub()

End Sub

Sub MySub()

    conn.Open()
    cmd.CommandType() = sql
    dr = cmd.ExecuteReader()
    dr.Read()

    GridView1.DataSource = dr.Read()

    conn.Close()
    conn.Dispose()


End Sub
End Class

代码分解为cmd.CommandType() = sql

.ToString之后放置cmd.CommandType() = sql.ToString,这会导致代码在GridView1.DataSource = dr.Read()处中断并出现无效的DataSource错误。

我一直在研究修复,似乎认为我需要在某处声明cmd.CommandType.Text,但如果不完全破坏代码就不能这样做。

感谢任何建议,如果是明显的建议,请道歉。谷歌并不是我的朋友。

由于

1 个答案:

答案 0 :(得分:3)

您将commandType设置为等于您的查询不正确。在你的情况下它应该是文本或者只是省略它,它仍然默认为文本。

CommandType只能是StoredProcedure,TableDirect或Text(来自http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtype.aspx

您应该使用CommandText propery(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtext.aspx