+++ 下面三个例子演示如何使用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看吧,找一个自己最喜欢的就行。