f#使用microsoft odbc将函数的返回值赋值给对象

时间:2014-07-03 19:11:58

标签: vb.net f#

VB中的

我有这段代码,

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()

1 个答案:

答案 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