我有这段代码,
Dim dataset As System.Data.Odbc.OdbcDataReader = cmd.ExecuteReader()
创建一个对象,其结果为cmd.Execute类型为OdbcDataReader的Reader,并将其分配给数据集。 cmd是System.Data.Odbc.OdbcCommand对象。
在f#中我试过
let dataset = new System.Data.Odbc.OdbcDataReader
dataset <- cmd.ExecuteReader
以及数据集的可变版本,我也尝试过
let dataset = cmd.ExecuteReader
第二个数据集实例上的第一个错误说&#34;表达式中此点或之前的不完整结构化构造&#34;添加分号并没有帮助。
第二个错误在let;说表达不完整。如何使用System.Data.Odbc.OdbcCommand.ExecuteReader的结果创建对象?
编辑:
更多代码
let dataConnection = new System.Data.Odbc.OdbcConnection()
dataConnection.ConnectionString <- "*******"
let mystring = "SQL query"
let cmd = new System.Data.Odbc.OdbcCommand(mystring, dataConnection)
let odbcConnectFunction =
try
dataConnection.Open()
System.Console.WriteLine "connected"
//let dataset = new System.Data.Odbc.OdbcDataReader
let dataset = cmd.ExecuteReader()
finally
dataConnection.Close()
答案 0 :(得分:2)
如果cmd
直接输入OdbcCommand
,您应该可以调用它,因为OdbcCommand.ExecuteReader
已经返回了相应的类型,类型推断将会#34;只是工作&#34;:
let dataset = cmd.ExecuteReader()
如果cmd
被输入为DbCommand
,那么您需要一些额外的代码。
在VB代码中,您要创建一个具有所需类型的变量(OdbcDataReader
),并让语言隐含性将类型从DbDataReader
更改为OdbcDataReader
}。 F#更类似于类型,并且不会为您隐式更改类型。
你需要在F#中明确地进行转换:
let dataset = cmd.ExecuteReader() :?> System.Data.Odbc.OdbcDataReader