public int ExecuteSqlTran(List<DWModel> lm)
{
string sql1 = "insert into dw (dwid,dwjh,dwdm,dwdes,datetime,isdel,bz,ip) values(:DWID,':DWJH',':DWDM',':DWDES',':DATETIME',:ISDEL,':BZ',':IP')";
System.Collections.Hashtable h = new System.Collections.Hashtable();
for (int i = 0; i < lm.Count; i++)
{
DWModel model = lm[i];
OracleParameter[] parameters = {
new OracleParameter(":DWID", OracleType.Number,3),
new OracleParameter(":DWJH", OracleType.Number,3),
new OracleParameter(":DWDM", OracleType.Char,11),
new OracleParameter(":DWDES", OracleType.VarChar,50),
new OracleParameter(":DATETIME", OracleType.DateTime),
new OracleParameter(":ISDEL", OracleType.Number,1),
new OracleParameter(":BZ", OracleType.VarChar,50),
new OracleParameter(":IP", OracleType.VarChar,15),
};
parameters[0].Value = model.DWID;
parameters[1].Value = model.DWJH ;
parameters[2].Value = model.DWDM;
parameters[3].Value = model.DWDES;
parameters[4].Value =Convert.ToDateTime ( model.DATETIME);//model.DATETIME定义的是string,用DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")获得
parameters[5].Value =model.ISDEL;
parameters[6].Value = model.BZ;
parameters[7].Value = model.IP;
h.Add(i,parameters);
}
return DBHelperOracle.DBHelper.ExecuteSqlTran(sql1,h);
}
在plugdeveloper替换数值插入成功 ,sql语句没问题
insert into dw (dwid,dwjh,dwdm,dwdes,datetime,isdel,bz,ip) values(1,'36-6-11','25654','5555','2013-06-14 22:12:45',0,'000','000');这条数据插入成功
请教 哪里的问题,折腾好几天了。
不是这的问题。
我感觉,你的循环那块有问题。你把执行放在了循环外,而不是循环内部。
改为如下代码试试:
public int ExecuteSqlTran(List<DWModel> lm) { string sql1 = "insert into dw (dwid,dwjh,dwdm,dwdes,datetime,isdel,bz,ip) values(:DWID,':DWJH',':DWDM',':DWDES',':DATETIME',:ISDEL,':BZ',':IP')"; System.Collections.Hashtable h =null; int insertCount=0; for (int i = 0; i < lm.Count; i++) { h= new System.Collections.Hashtable(); DWModel model = lm[i]; OracleParameter[] parameters = { new OracleParameter(":DWID", OracleType.Number,3), new OracleParameter(":DWJH", OracleType.Number,3), new OracleParameter(":DWDM", OracleType.Char,11), new OracleParameter(":DWDES", OracleType.VarChar,50), new OracleParameter(":DATETIME", OracleType.DateTime), new OracleParameter(":ISDEL", OracleType.Number,1), new OracleParameter(":BZ", OracleType.VarChar,50), new OracleParameter(":IP", OracleType.VarChar,15), }; parameters[0].Value = model.DWID; parameters[1].Value = model.DWJH ; parameters[2].Value = model.DWDM; parameters[3].Value = model.DWDES; parameters[4].Value =Convert.ToDateTime ( model.DATETIME);//model.DATETIME定义的是string,用DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")获得 parameters[5].Value =model.ISDEL; parameters[6].Value = model.BZ; parameters[7].Value = model.IP; h.Add(i,parameters); insertCount+=DBHelperOracle.DBHelper.ExecuteSqlTran(sql1,h); } return insertCount; }
没调试,你自己测试下。总的意思就是插入应该放在循环体中,而不是之外。
OracleParameter那个参数有问题不能重复这几个问题我遇到过 还有变量什么 不要放到for里面
参考:
public bool InsertModels(string[] objID, string groupID, string holdID) { string[] sql = new string[objID.Length]; StringBuilder str = new StringBuilder(); SqlParameter[] spr = null; Dictionary<string, object> parameter = new Dictionary<string, object>(); string sq = "delete from std_objGroup where GroupID=" + groupID; parameter.Add(sq, null); for (int i = 0; i <sql.Length; i++) { str.Clear(); str.Append(@"insert into std_objGroup(GroupID,ObjectID)values(@GroupID" + i.ToString() + ",@ObjectID" + i.ToString() + ")"); spr = new SqlParameter[]{ new SqlParameter("@GroupID" + i.ToString(),SqlDbType.Decimal,10), new SqlParameter("@ObjectID" + i.ToString(),SqlDbType.Decimal,10) }; spr[0].Value =groupID ; spr[1].Value = objID[i]; sql[i] = str.ToString(); parameter.Add(sql[i], spr); } return Commit.executeTransaction(parameter); }
对着我的这个inset into 里面的 来就可以了
照着看了,没有看出你的spr在循环外面。
@易顺金:
SqlParameter[] spr = null; Dictionary<string, object> parameter = new Dictionary<string, object>();
values(@GroupID" + i.ToString()
肯定是最后执行的SQL的语句的问题,看我的截图:
红色框住的值能转换成 Number 型?