向OracleCommand与OracleDataAdapter添加参数的差异及优劣对比
OracleCommand参数添加方式的差异与优劣分析
咱们先把核心结论摆出来:这两种添加参数的方式本质上没有任何差异,执行速度也完全一样,原因很简单——你操作的都是同一个OracleCommand对象。
先拆解两种方式的本质
对于方式一:你创建
OracleDataAdapter的时候已经把command传入了,这时候adapter的SelectCommand已经指向这个command实例了,后面的adapter.SelectCommand = command其实是多余的。你先给command加参数,再关联adapter,本质就是给这个command的参数集合加内容。string f= "foo"; string sql = "SELECT @c FROM Dual"; using(OracleCommand command = new OracleCommand(sql, this.Connection)) { OracleParameter param = new OracleParameter("@c", f); command.Parameters.Add(param); OracleDataAdapter adapter = new OracleDataAdapter(command); // 下面这行是多余的,因为new的时候已经绑定了SelectCommand // adapter.SelectCommand = command; DataSet dataset = new DataSet(); adapter.Fill(dataset); return dataset; }对于方式二:你直接操作
adapter.SelectCommand.Parameters,其实还是在操作你一开始创建的那个command对象——因为adapter.SelectCommand就是它的引用,和方式一的参数添加逻辑完全一致。string f= "foo"; string sql = "SELECT @c CalcVarValue FROM Dual"; using(OracleCommand command = new OracleCommand(sql, this.Connection)) { OracleDataAdapter adapter = new OracleDataAdapter(command); adapter.SelectCommand.Parameters.Add(new OracleParameter("@c", f)); DataSet dataset = new DataSet(); adapter.Fill(dataset); return dataset; }
哪种方式更受青睐?
一般来说,方式一的写法会更受欢迎,因为它的逻辑流程更清晰:先把数据库命令(包括SQL、参数、其他配置比如超时时间)完全构建好,再交给DataAdapter去执行。这种写法在复杂场景下(比如需要复用command、给command设置多个属性)可读性更强,也更容易维护。
当然,如果是非常简单的场景,方式二的紧凑写法也没问题,只是逻辑上稍微绕了一点——毕竟你是通过adapter间接操作command的参数。
关于执行速度
完全没有差异!不管你用哪种方式,最终都是把参数添加到同一个OracleCommand的参数集合里,数据库端接收到的命令和参数完全一样,执行效率自然没有区别。
内容的提问来源于stack exchange,提问作者Jimenemex
相关产品推荐
相关产品推荐

