我有C#代码我想在WinForms应用程序和ASP.NET网站中使用。数据库连接字符串虽然各有不同,但我希望能够找出它正在运行的平台并正确设置连接字符串。有没有简单/推荐的方法来做到这一点?
这应该在WinForms和ASP.NET上编译,所以不需要System.Windows
或System.Web
引用。
答案 0 :(得分:3)
框架已经为您处理了这个问题。使用System.Configuration.ConfigurationManager.AppSettings
或ConfigurationManager.ConnectionStrings
来阅读您的连接字符串,它们将从WinForms中的 App.config 和ASP中的 Web.config 中读取。净。您可以在两个配置文件中添加不同的值。
至于更一般的问题 - 您可以检查System.Web.HttpContext.Current
,如果它不是null
,那么您肯定在ASP.NET中运行。如果它是null
,那么可能不在ASP.NET中,但可能不在请求中。您还可以尝试检查System.Web.HttpRuntime
上的一些属性。
编辑:如果您不想添加对System.Web.dll的引用,可以通过Reflection调用上面的内容:首先调用Type.GetType("System.Web.HttpContex")
,如果返回{{1}那么你绝对不是在ASP.NET中。如果它返回一个值,则可以继续获取null
静态属性。
答案 1 :(得分:2)
建议的方法是将连接字符串存储在配置文件中 - App.Config或Web.Config,并使用ConfigurationManager
从中读取。请参阅MSDN中的Storing and Retrieving Connection Strings。
答案 2 :(得分:1)
让数据库代码检测到正在运行的平台似乎是错误的解决方案。无论你选择什么,似乎都有办法击败它。
相反,我会让我的应用程序的入口点以声明方式表达它的平台。
enum Platform {
AspNet,
WinForms
}
public class DataConnection {
public DataConnection(Platform platform) {
...
}
}