ADO.NET_第七篇_OracleCommand_01ExecuteNonQuery

来源:互联网 发布:天猫交易额实时数据 编辑:程序博客网 时间:2024/04/28 03:00

+++ 下面三个例子演示如何使用OracleCommand. ExecuteNonQuery()
Oraclecommand.ExecuteNonQuery方法主要是进行用来执行目录操作(如查询数据库结构或创建数据库对象),或通过执行UPDATE,INSERT,DELETE这样的SQL语句。
+++ 例一
protected void Page_Load(object sender, EventArgs e)
{
    string connStr = "Data Source=ora9; uid=scott; pwd=tiger; unicode=true";
    string aVar = "AAA";
    string bVar = "AAA";
    string sqlStr = "INSERT INTO AB(A,B) VALUES('" + aVar + "','" + bVar + "')";
    OracleConnection conn = new OracleConnection(connStr);
    conn.Open();
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = sqlStr;
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();
    //int rowAffected = cmd.ExecuteNonQuery();
    //Response.Write("受影响的行:" + rowAffected);
    conn.Close();
    conn.Dispose();
    cmd.Dispose();
}
++ 说明:
1) Oraclecommand.ExecuteNonQuery方法对于UPDATE、INSERT、DELETE语句,返回值为该命令所影响的行数;对于其他类型的语句,返回值为-1;如果发生回滚,返回值为-1;
2) 本例直接用构造SQL,而没有使用OracleParameter。

 

+++ 例二
protected void Page_Load(object sender, EventArgs e)
{
    string connStr = "Data Source=ora9; uid=scott; pwd=tiger; unicode=true";
    string insertSql = "INSERT INTO AB(A,B) VALUES(:aVar,:bVar)";
    OracleConnection conn = new OracleConnection(connStr);
    conn.Open();
    OracleCommand cmd = new OracleCommand(insertSql, conn);
    OracleParameter[] paras = {
        new OracleParameter("aVar", OracleType.NVarChar, 10),
        new OracleParameter("bVar", OracleType.NVarChar, 10)};
    paras[0].Value = "AAA";
    paras[1].Value = "AAA";
    //OracleParameter[] paras = new OracleParameter[2];
    //paras[0] = new OracleParameter("aVar", OracleType.NVarChar, 10);
    //paras[1] = new OracleParameter("bVar", OracleType.NVarChar, 10);
    //paras[0].Value = "AAA";
    //paras[1].Value = "AAA";
    //OracleParameter[] paras = new OracleParameter[2];
    //paras[0] = new OracleParameter("aVar", "AAA");
    //paras[1] = new OracleParameter("bVar", "AAA");
    foreach (OracleParameter para in paras)
        cmd.Parameters.Add(para);
    cmd.CommandType = CommandType.Text;
    cmd.ExecuteNonQuery();
    Response.Write("OK");
    conn.Close();
}
++ 说明
1) 本例没有直接构造SQL语句,而是使用OracleParameter;
2) 虽然用OracleParameter执行SQL语句挺灵活的,但在实际项目中往往不这么做,而是直接构造SQL语句。直接构造SQL很直观,调试程序时很容易检查SQL语句是否正确。那么什么情况下使用OracleParameter呢?比如,向操作数据库的Clob字段,如果直接构造SQL语句可能存在字符串长度限制的问题。这点,在Oracle 9i上很明显,但是Oracle 11g上就基本上看不出来,但是为了保险起见,这种情况我们就使用OracleParameter。对于这个问题,我会在OracleLob(Oracle Large Object)中介绍;
3) 注释的部分是构造OracleParameter的另一个方法。

 

+++ 例三
protected void Page_Load(object sender, EventArgs e)
{
    string msg = "";
    string connStr = "Data Source=ora9; uid=scott; pwd=tiger; unicode=true";
    string insertSql = "INSERT INTO AB(A,B) VALUES(:aVar,:bVar)";
    OracleConnection conn = new OracleConnection(connStr);
    OracleCommand cmd = new OracleCommand(insertSql, conn);
    cmd.Connection.Open();
    foreach (OracleParameter para in cmd.Parameters)
    {
        msg += para.ToString() + "/n";
    }
    Response.Write(msg + "</br>");
    try
    {
        cmd.Parameters.Add(new OracleParameter("aVar", OracleType.NVarChar, 10));
        cmd.Parameters["aVar"].Value = "AAA";
        cmd.Parameters.Add(new OracleParameter("bVar", OracleType.NVarChar, 10));
        cmd.Parameters["bVar"].Value = "AAA";
        cmd.CommandType = CommandType.Text;
        //cmd.Parameters.AddWithValue("aVar", "AAA");
        //cmd.Parameters.AddWithValue("aVar", "AAA");
        cmd.ExecuteNonQuery();
    }
    catch (OracleException ex)
    {
        MessageBox.Show("插入数据错误 from OracleException" + ex.Message);
    }
    catch (Exception ex)
    {
        MessageBox.Show("插入数据错误 from Exception" + ex.Message);
    }
    finally
    {
        cmd.Connection.Close();
    }
}
++ 说明
1) 本例简单地使用了异常处理,但通常都是用事务来执行UPDATE、INSERT、DELETE语句这样的SQL语句;
2) 注释的部分是构造OracleParameter的另一个方法;
3) OracleParameter的构造函数一共有7个,自己到MSDN看吧,找一个自己最喜欢的就行。

原创粉丝点击