2

我正在开发一个商业应用程序(asp.net)。现在我正在使用 sql server。但我计划在未来至少支持 mysql 和 postgresql。为了避免未来的头痛,我应该考虑哪些问题?特别是关于数据类型(列类型)。例如,我认为某些数据库不支持 BIT 列,所以我使用 tinyint?

我主要使用纯 sql(没有实体框架或 linq 等),并尽量保持简单。我没有使用触发器等东西。我确实使用存储过程,但如果必须,它们可以用普通的 sql 替换。

4

3 回答 3

1

正如 Remus Rusanu 建议的那样,您唯一的希望是将数据访问分离到适当的数据访问层中。数据访问层可以与您的其余代码有一个一致的接口,并且可以针对每个 DB 平台的其他版本进行更改。保持 SQL 相当标准会有所帮助,但实际上不可能编写一个 SQL 代码体并让它在任何地方都可以工作(SQL 标准并没有很好地实现。)

于 2009-07-30T17:16:27.767 回答
1

考虑(在学习曲线方面有一些成本)采用域模型和基于 OR/M 的数据访问层,如 NHibernate(https://www.hibernate.org/343.html

于 2009-07-31T14:43:09.750 回答
0

确保使用抽象IDbConnectionIDbCommandIDataReader而不是具体编写所有客户端代码。您还必须始终检查您的 SQL 语句,以确保您只使用兼容的语法。

您还可以尝试通过OdbcConnection /OdbcCommand 组件进行连接,并使用通用 ODBC 语法和通用 ODBC 数据类型(即{fn SUBSTRING(...)}东西,又名ODBC Escaped Syntax)。

作为替代方案,我更喜欢做的是隔离数据访问并为每个后端创建特定的 DAL 类。我使用 XML 和 XSLT 来生成 DAL 代码。与我的博客中集成 XSLT 代码生成的技术类似,但 XSLT 专门针对每个后端特定代码。

于 2009-07-30T00:05:14.160 回答