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();
}
效果如下:
我已经把这个简单Demo上传,下载地址