下面代码能实现把数组 WELL_ID,REF_WELL_ID 插入到 td_bas_well 表中,
请问各位,怎样以同样的方式实现更新呢?
网上说可以执行更新,但是我试了很多次都失败了,
这是网址:http://blog.csdn.net/hawksoft/article/details/7528384 string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; OracleCommand theCmmd = new OracleCommand("insert into td_bas_well (WELL_ID,REF_WELL_ID) values(:WELL_ID,:REF_WELL_ID)", ConnPool.GetTargetConn().Conn);
theCmmd.ArrayBindCount = WELL_ID.Length;//关键点
theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
int count = theCmmd.ExecuteNonQuery();
请问各位,怎样以同样的方式实现更新呢?
网上说可以执行更新,但是我试了很多次都失败了,
这是网址:http://blog.csdn.net/hawksoft/article/details/7528384 string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; OracleCommand theCmmd = new OracleCommand("insert into td_bas_well (WELL_ID,REF_WELL_ID) values(:WELL_ID,:REF_WELL_ID)", ConnPool.GetTargetConn().Conn);
theCmmd.ArrayBindCount = WELL_ID.Length;//关键点
theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
int count = theCmmd.ExecuteNonQuery();
可是返回值为0,百思不得其解 string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; OracleCommand theCmmd = new OracleCommand("update td_bas_well set REF_WELL_ID = :REF_WELL_ID where WELL_ID = :WELL_ID", ConnPool.GetTargetConn().Conn);
theCmmd.ArrayBindCount = WELL_ID.Length;//关键点
theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
int count = theCmmd.ExecuteNonQuery();
你好,你的意思是只要把
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
改成:
OracleParameter op = new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input);
op.ArrayBindSize = new int []{2,2,2,2,2,2,2,2,2,2};
theCmmd.Parameters.Add(op);
可是即使给OracleParameter 设置了ArrayBindSize ,也执行不了啊?
string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
要改为定长的字符串,比如都2位,不足补空格:
string[] WELL_ID = new string[] { "1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "10" };
你也可以试试指定OracleParameter的Size属性,但总之定长是必须的。而那个ArrayBindSize必须是int类型的,没让你用数组。
可是我执行insert成功了啊?下面是代码,插入的也是string[]型的,类型也是Varchar2,成功运行,并返回结果10,这样是怎么回事儿?是不是问题出现在其他地方?麻烦了 string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
OracleCommand theCmmd = new OracleCommand("insert into td_bas_well (WELL_ID,REF_WELL_ID) values(:WELL_ID,:REF_WELL_ID)", ConnPool.GetTargetConn().Conn);
theCmmd.ArrayBindCount = WELL_ID.Length;//关键点
theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
OracleCommand theCmmd = new OracleCommand("insert into td_bas_well (WELL_ID,REF_WELL_ID) values(:WELL_ID,:REF_WELL_ID)", ConnPool.GetTargetConn().Conn);
theCmmd.ArrayBindCount = WELL_ID.Length;//关键点
theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));在以下是更新,更新失败:
string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; OracleCommand cmd = new OracleCommand("update td_bas_well set REF_WELL_ID = :REF_WELL_ID where WELL_ID = :WELL_ID", ConnPool.GetTargetConn().Conn);
cmd.ArrayBindCount = WELL_ID.Length;
cmd.Parameters.Add(new Oracle.DataAccess.Client.OracleParameter("REF_WELL_ID",OracleDbType.Varchar2));
cmd.Parameters["REF_WELL_ID"].Direction = System.Data.ParameterDirection.Input;
cmd.Parameters["REF_WELL_ID"].Value = REF_WELL_ID;
cmd.Parameters.Add(new Oracle.DataAccess.Client.OracleParameter("WELL_ID", OracleDbType.Char));
cmd.Parameters["WELL_ID"].Direction = System.Data.ParameterDirection.Input;
cmd.Parameters["WELL_ID"].Value = WELL_ID;
int i = cmd.ExecuteNonQuery();
在创建参数时,参数顺序必须与SQL语句的顺序相同
否则不会执行,且会返回0