我最近读到了应该如何避免游标。好吧,我想知道我对它们的使用是否合适。
我正在创建一个可以在线工作的脚本引擎(嵌入在页面中,服务器端)这个脚本引擎将被这个产品的“高级”最终用户使用。然而,该产品与数据库的工作量很大,并且脚本语言类似于 C,但简化为它也类似于 PHP。对于数据库,我基本上想要这样的语法,因为它是语言中可创建的最一致的语法,无需最终用户手动编写 SQL 代码(如果我们要让他们这样做,他们为什么不能跳过脚本引擎,因为它使生活更简单)。语法是这样的:
declare DataSet $data("tablename","OtherID="+$oid);
//Dataset(string tablename,string where_clause_addon)
$data["field1"]="the data of field... ";
$data.Next();
$data["field1"]="The data of the next row";
$data[10]["field1"]="The data of the 10th row";
我通过为每个 DataSet 创建一个全局游标(我在应用程序中只使用 1 个连接)然后让全局游标跟踪当前行位置(它也是一个 SCROLL 和 UPDATE 游标)来在内部控制它。这让我的生活变得更加简单,否则我将被迫编写自己的 SQL 控件来对抗 .Net 糟糕的 DataReader。
游标的这种用法可以吗?请注意,包含这些脚本的页面将无法在全球范围内访问,它仅适用于客户(因此可能一次只能有 3-10 个用户)。
有没有人看到跟踪当前变量位置的更好方法?(因为这些能够处理未知模式的表)
另外,我在使用这样的游标时会遇到并发问题吗?(我的文档说游标对于连接是全局的,每个页面请求都会在现场建立一个新连接,因此用户不会共享连接)