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

在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

第二个数据集实例上的第一个错误是“在表达式中此点或之前的不完整结构化构造”添加分号没有帮助.

第二个错误就在了;说表达不完整.如何使用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()

最佳答案 如果cmd直接输入为OdbcCommand,你应该可以只调用它,因为
OdbcCommand.ExecuteReader已经返回了相应的类型,类型推断将“正常工作”:

let dataset = cmd.ExecuteReader()

但是,如果将cmd键入为DbCommand,则此处需要一些额外的代码.

在VB代码中,您正在创建一个具有所需类型的变量(OdbcDataReader),并让语言隐含性将类型从DbDataReader更改为OdbcDataReader. F#更特别关于类型,不会隐式更改类型.

你需要在F#中明确地进行转换:

let dataset = cmd.ExecuteReader() :?> System.Data.Odbc.OdbcDataReader
点赞