首页 新闻 会员 周边

c#向oracle 插入数据失败,输入字符串的格式不正确。

0
悬赏园豆:15 [待解决问题]

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');这条数据插入成功

请教 哪里的问题,折腾好几天了。

c#
问题补充:

不是这的问题。

易顺金的主页 易顺金 | 初学一级 | 园豆:2
提问于:2013-06-11 01:11
< >
分享
所有回答(4)
0

我感觉,你的循环那块有问题。你把执行放在了循环外,而不是循环内部。

改为如下代码试试:

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;
}

没调试,你自己测试下。总的意思就是插入应该放在循环体中,而不是之外。

幻天芒 | 园豆:37175 (高人七级) | 2013-06-11 01:36
0

输入字符串的格式不正确。 明显是C# 类型转换问题

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2013-06-11 11:08
0

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 里面的 来就可以了

s_p | 园豆:138 (初学一级) | 2013-06-11 20:24

照着看了,没有看出你的spr在循环外面。

支持(0) 反对(0) 易顺金 | 园豆:2 (初学一级) | 2013-06-11 21:21

@易顺金: 

 SqlParameter[] spr = null;
            Dictionary<string, object> parameter = new Dictionary<string, object>();

 

values(@GroupID" + i.ToString()
支持(0) 反对(0) s_p | 园豆:138 (初学一级) | 2013-06-11 21:22
0

肯定是最后执行的SQL的语句的问题,看我的截图:

红色框住的值能转换成 Number 型?

webaspx | 园豆:1973 (小虾三级) | 2013-06-21 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册