使用SqlDataConnection类型提供程序的常规方法如下:
type dbSchema = SqlDataConnection<"Data Source=MYSERVER\INSTANCE;InitialCatalog=MyDatabase;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()
Run Code Online (Sandbox Code Playgroud)
但是我们遇到一个问题,我们希望在f#脚本中使用此类型提供程序,其中数据库的连接字符串作为参数传递.所以我想做的是这样的:
let connectionString= Array.get args 1
type dbSchema = SqlDataConnection<connectionString>
Run Code Online (Sandbox Code Playgroud)
但是它会给出错误"这不是常量表达式或有效的自定义属性值"
有没有办法做到这一点?
不幸的是,没有办法做到这一点,类型提供程序需要一个编译时文字字符串.这样,当您编译应用程序时,类型提供程序能够连接和检索有关数据库的元数据并生成编译器的类型.您可以选择通过在表单中写入连接字符串将其提取到字符串文字中
[<Literal>] let connString = "Data Source=..."
type dbSchema = SqlDataConnection<connString>
Run Code Online (Sandbox Code Playgroud)
假设您的2个数据库具有相同的模式,则可以将运行时连接字符串作为参数提供给GetDataContext方法,如
let connectionString = args.[1]
let dbContext = dbSchema.GetDataContext(connectionString)
Run Code Online (Sandbox Code Playgroud)