我看不到我做錯了什麼,因爲這些文件的順序是正確的。在這種情況下,它是:在繼承某個類型時獲取「值未定義」
- BaseDAO.fs
- CreateDatabase.fs
他們在同一個命名空間,但即使我讓他們在不同的模塊,並在CreateDatabase
打開模塊同樣的錯誤。
的錯誤是:
Error 1 The value or constructor 'execNonQuery' is not defined
我想繼承BaseDAO
和使用,這將是常見的幾個文件的成員,我不明白爲什麼我得到上述錯誤。
namespace RestaurantServiceDAO
open MySql.Data.MySqlClient
type BaseDAO() =
let connString = @"Server=localhost;Database=mysql;Uid=root;Pwd=$$$$;"
let conn = new MySqlConnection(connString)
member self.execNonQuery(sqlStr) =
conn.Open()
let comm = new MySqlCommand(sqlStr, conn, CommandTimeout = 10)
comm.ExecuteNonQuery |> ignore
comm.Dispose |> ignore
繼承的類型在這裏,並且execNonQuery
未定義。
namespace RestaurantServiceDAO
open MySql.Data.MySqlClient
type CreateDatabase() =
inherit BaseDAO()
let createRestaurantTable conn =
execNonQuery "CREATE TABLE restaurant(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), cur_timestamp TIMESTAMP(8))"
我無法使用base.execNonQuery,因爲它抱怨關閉,但我確實將它們變成了成員,並解決了我的問題。謝謝 – 2010-05-10 02:27:20
@James:你說得對 - 'base'不能用在let函數中。這有點不那麼簡單 - 增加'as self'可能是另一種選擇(它會生成一些運行時檢查以確保初始化是正確的,並且在類完全初始化之前不使用'self',但是不應該'不會是個大問題)。 – 2010-05-10 02:41:01