ExecuteScalar()方法通过SELECT语句返回查询结果中的第一行第一列的值,该方法常用于执行返回单个字段的
查询,如count(),max()等。
ExecuteNonQuery()方法执行返回结果集的命令,如insert delete update。这个方法返回一个信息--受影响的
行数,如果不是insert delete update 则返回-1。
为了防止sql注入漏洞我们一般在写sql的时候不会使用字符串拼接。而是参数化的形式
如 select * from dept=:dept 在这里:dept就是要替换的参数。在oracle中用:但是在SQL Server中使用@dept
也可以用数字替代。
这里一个简单的实例演示oracle中的参数化查询,SQL Server中类似
首先还是配置链接字符串,这些就不多做说明,代码有详细的注释
其中得到链接在后台方法有,这个后台上一节有。
DbTest o_Dt = null; OracleCommand o_Comm = null; OracleConnection o_Conn = null; StringBuilder sb = new StringBuilder(); try { o_Dt = new DbTest(); //得到链接 o_Conn = o_Dt.GetConn; //打开链接 o_Conn.Open(); OracleDataReader _reader = null; //抓页面抓取数据 string _deptNo = txtDeptNo.Text.Trim(); string _deptName = txtDeptNM.Text.Trim(); //创建Command对象 o_Comm = new OracleCommand(); //拼接sql(使用参数化) sb.Append(@" select * from dept where 1=1 "); if (!string.IsNullOrEmpty(_deptNo)) { sb.Append(" and deptno=:deptno"); o_Comm.Parameters.Add("deptno", OracleDbType.Varchar2); o_Comm.Parameters["deptno"].Value = _deptNo; } if (!string.IsNullOrEmpty(_deptName)) { sb.Append(" and dname like :dname"); o_Comm.Parameters.Add("dname", OracleDbType.Varchar2); o_Comm.Parameters["dname"].Value = "%" + _deptName + "%"; } //指定执行的sql语句 o_Comm.CommandText = sb.ToString(); //指定链接 o_Comm.Connection = o_Conn; //获得DataReader对象 _reader = o_Comm.ExecuteReader(); //绑定数据 grdDept.DataSource = _reader; grdDept.DataBind(); } catch (Exception ex) { Response.Write(ex.Message); } finally { //关闭资源 o_Conn.Close(); }
这个是条件查询的写法,结果如图:
这个是查询,下面简单介绍下新增:
后台代码:
/// <summary> /// 简单新增 /// </summary> /// <param name="sql"></param> /// <returns></returns> public int DoExecute(string sql) { try { o_Conn.Open(); o_Comm.CommandText = sql; o_Comm.Connection = o_Conn; i = o_Comm.ExecuteNonQuery(); } catch (Exception ex) { o_Reader = null; } return i; } /// <summary> /// 简单设定参数 /// </summary> /// <param name="paraName"></param> /// <param name="dbType"></param> /// <param name="activeValue"></param> public void AddParams(string paraName, OracleDbType dbType, string activeValue) { o_Comm.Parameters.Add(paraName, dbType); o_Comm.Parameters[paraName].Value = activeValue; }前台调用的代码:
//抓取页面数据 string _no = txtNo.Text.Trim(); string _name = txtNM.Text.Trim(); string _loc = txtLoc.Text.Trim(); DbTest o_Db = new DbTest(); StringBuilder sb = new StringBuilder(); sb.Append(@" insert into dept values(:no,:nm,:loc)"); //调用方法设定参数 o_Db.AddParams("no", OracleDbType.Varchar2, _no); o_Db.AddParams("nm", OracleDbType.Varchar2, _name); o_Db.AddParams("loc", OracleDbType.Varchar2, _loc); int i = o_Db.DoExecute(sb.ToString()); if (i > 0) { //重新绑定 Bind(); }效果如下:
资源