视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
将Access移植到SQLServer
2020-11-09 13:54:21 责编:小采
文档


到SQL Server的Access开发人员面临着很多困难,然而最为棘手的问题是对动态SQL的处理。在Access中,将控件的行指定为一个字符串是相当普通的现象。例如,窗体上包含着很多的选择器(SalesGroup,State/Province/Canton,Beginning Date以及Ending Date等等),

  到SQL Server的Access开发人员面临着很多困难,然而最为棘手的问题是对动态SQL的处理。在Access中,将控件的行指定为一个字符串是相当普通的现象。例如,窗体上包含着很多的选择器(SalesGroup,State/Province/Canton,Beginning Date以及Ending Date等等),Access开发人员一般都会检查这些控件以查看哪些为Null,然后编写SQL语句以删除这些Null值。

  通过这种方法连接到SQL Server具有以下几点的缺点:

  所有的处理都在客户端完成,而不是在服务器中完成。

  解析这些控件和处理SQLq语句的代码显得拖沓冗长。

  这一方法容易导致SQL 混入攻击(injection attacks)。

  渴望扩展到SQL Server的Access开发人员必须解决两个方面的问题:

  1. 识别所有非基于名称查询的记录和行的数据源。

  2. 使用名称查询替代所有的查询。

  对于动态地处理查询,可以以如下所示的代码处理:

  SELECT *

  FROM SomeTables

  WHERE ColumnOfInterest = Forms("myForm").ControlOfInterest

  AND Column2OfInterest = Forms("myForm").Control2OfInterest

  为了简单起见,我们假设Access窗体上只包含两个控件。Access方法将在代码中解析控件的值,然后通过使用非零值的方法处理每一动态SQL查询。

  这是一种没有向导的方式。你所需要的是一个存储程序,这一存储程序被参数化以接收来自窗体上控件的所有数据。例如,,假设以上给定的两个控件,存储程序被自身的数据触发,如果数值为Null,存储程序就会“智能化地”执行。

  这里是实现这一过程的一个简单技巧:

  SELECT *

  FROM SomeTables

  WHERE ColumnOfInterest = 12345 OR ColumnOfInterest is NULL

下载本文
显示全文
专题