在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