SharpScript .ss 文件可以连接到数据库,但相同的代码在提供给本地网络浏览器时不起作用?
SharpScript .ss file works to connect to database, but same code doesn't work when served to local web-browser?
我有一个 SharpScript .ss 脚本文件,其中包含一些小代码,可以轮询数据库并格式化要显示的内容。输出对于命令行输出来说太不守规矩了,所以我想生成 html 并查看类似的东西。使用 .ss 文件中的 htmlDump 生成 html 效果很好,但是当我从他们的模板之一创建一个小型 Web 项目时,数据库连接停止工作?
在指定网站连接字符串和 .ss 脚本文件方面有什么不同吗?
我只是在文件开头有常规的 args 规范
<!--
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
-->
这在 .ss 脚本文件中工作正常,然后我可以做类似
的事情
```code
{{
"select * from View drv
join [Project] p on drv.ProjectId = p.ProjectId
where DocumentId = 'GUID' "
| dbSelect
| map => {it.RecordId, it.Text, it.Name}
| to => sqlMap
}}
sqlMap | count
sqlMap | textDump
```
并从 textDump 中获得类似计数 (21) 和 table 的输出。
然后我使用 web new bare-webapp Name
从模板创建了一个 "bare-webapp" 并添加了一个具有相同内容的新 html 文件,但这不起作用?如果我这样做
{{dbTableNames | count }}
{{db}}
我可以看到 db 参数在浏览器中呈现为 "mssql" 就像在参数输入中一样,但是没有列出 table 名称,并且没有 sql 查询工作.我没有看到任何错误消息或任何内容,所以我不知道发生了什么?我认为 SharpScript 能够呈现 html 页面,类似于 .ss 脚本文件如何访问数据库?
它们是非常不同的上下文。 stand-alone .ss Sharp Scripts are executed within the context of a Sharp App that's executed by the dotnet tools 可以访问所有 ServiceStack 实现程序集。所以当脚本看到:
<!--
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
-->
它会创建一个 ScriptContext
预配置 #Script Database Scripts and an OrmLiteConnectionFactory
configured with the ServiceStack.OrmLite.SqlServer 提供程序和您的连接字符串。
相比之下,在网页中执行的 #Script Pages 只能访问在您的应用程序中配置的 SharpPagesFeature
上下文。因此,您需要像往常一样在 AppHost 中配置 OrmLite,例如:
container.AddSingleton<IDbConnectionFactory>(() =>
new OrmLiteConnectionFactory(connectionString, SqlServer2012Dialect.Provider));
然后让 Database Scripts 可供您的 SharpPagesFeature
使用,例如:
Plugins.Add(new SharpPagesFeature {
ScriptMethods = {
new DbScriptsAsync()
}
});
这将使您的页面可以访问数据库脚本,该脚本将使用您注册的 OrmLiteConnectionFactory
。
Sharp Apps
Sharp Apps 是一种快速开发完全使用 #Script
创建的 Web 应用程序的方法,它支持即时反馈实时开发模型,因为您的应用程序不需要重新编译或重新启动。 Sharp Apps,就像你的 Sharp Scripts 一样 运行
$ x new bare-webapp ProjectName
然后您可以在您的应用程序目录中使用 x run
启动您的 Sharp 应用程序,例如:
$ cd ProjectName
$ x run
Sharp Scripts 中的相同功能也可用于 Sharp Apps,但不是将应用配置添加到脚本顶部,而是将其添加到 app.settings
,例如:
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
请注意从v5.7开始#Script是transitioning to use the JS Pipeline Operator Syntax,所以现在建议写成:
```code
{{
"select * from View drv
join [Project] p on drv.ProjectId = p.ProjectId
where DocumentId = 'GUID' "
|> dbSelect
|> map => {it.RecordId, it.Text, it.Name}
|> to => sqlMap
}}
sqlMap |> count
sqlMap |> textDump
```
我有一个 SharpScript .ss 脚本文件,其中包含一些小代码,可以轮询数据库并格式化要显示的内容。输出对于命令行输出来说太不守规矩了,所以我想生成 html 并查看类似的东西。使用 .ss 文件中的 htmlDump 生成 html 效果很好,但是当我从他们的模板之一创建一个小型 Web 项目时,数据库连接停止工作?
在指定网站连接字符串和 .ss 脚本文件方面有什么不同吗?
我只是在文件开头有常规的 args 规范
<!--
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
-->
这在 .ss 脚本文件中工作正常,然后我可以做类似
的事情```code
{{
"select * from View drv
join [Project] p on drv.ProjectId = p.ProjectId
where DocumentId = 'GUID' "
| dbSelect
| map => {it.RecordId, it.Text, it.Name}
| to => sqlMap
}}
sqlMap | count
sqlMap | textDump
```
并从 textDump 中获得类似计数 (21) 和 table 的输出。
然后我使用 web new bare-webapp Name
从模板创建了一个 "bare-webapp" 并添加了一个具有相同内容的新 html 文件,但这不起作用?如果我这样做
{{dbTableNames | count }}
{{db}}
我可以看到 db 参数在浏览器中呈现为 "mssql" 就像在参数输入中一样,但是没有列出 table 名称,并且没有 sql 查询工作.我没有看到任何错误消息或任何内容,所以我不知道发生了什么?我认为 SharpScript 能够呈现 html 页面,类似于 .ss 脚本文件如何访问数据库?
它们是非常不同的上下文。 stand-alone .ss Sharp Scripts are executed within the context of a Sharp App that's executed by the dotnet tools 可以访问所有 ServiceStack 实现程序集。所以当脚本看到:
<!--
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
-->
它会创建一个 ScriptContext
预配置 #Script Database Scripts and an OrmLiteConnectionFactory
configured with the ServiceStack.OrmLite.SqlServer 提供程序和您的连接字符串。
相比之下,在网页中执行的 #Script Pages 只能访问在您的应用程序中配置的 SharpPagesFeature
上下文。因此,您需要像往常一样在 AppHost 中配置 OrmLite,例如:
container.AddSingleton<IDbConnectionFactory>(() =>
new OrmLiteConnectionFactory(connectionString, SqlServer2012Dialect.Provider));
然后让 Database Scripts 可供您的 SharpPagesFeature
使用,例如:
Plugins.Add(new SharpPagesFeature {
ScriptMethods = {
new DbScriptsAsync()
}
});
这将使您的页面可以访问数据库脚本,该脚本将使用您注册的 OrmLiteConnectionFactory
。
Sharp Apps
Sharp Apps 是一种快速开发完全使用 #Script
创建的 Web 应用程序的方法,它支持即时反馈实时开发模型,因为您的应用程序不需要重新编译或重新启动。 Sharp Apps,就像你的 Sharp Scripts 一样 运行
$ x new bare-webapp ProjectName
然后您可以在您的应用程序目录中使用 x run
启动您的 Sharp 应用程序,例如:
$ cd ProjectName
$ x run
Sharp Scripts 中的相同功能也可用于 Sharp Apps,但不是将应用配置添加到脚本顶部,而是将其添加到 app.settings
,例如:
db mssql
db.connection Server=ble\bla;Database=blu;user id=blo;password=#blingblong#
请注意从v5.7开始#Script是transitioning to use the JS Pipeline Operator Syntax,所以现在建议写成:
```code
{{
"select * from View drv
join [Project] p on drv.ProjectId = p.ProjectId
where DocumentId = 'GUID' "
|> dbSelect
|> map => {it.RecordId, it.Text, it.Name}
|> to => sqlMap
}}
sqlMap |> count
sqlMap |> textDump
```