DataSet批量递交Oracle ORA-01036: 非法的变量名/编号

Tigerworm 2010-09-20 05:17:55
--------------------------------------SQL------------------------------------------------
insert into JS_JDFP_FPMX(
ID,NSRSBH,NSRMC,JQBH,FPDM,FPHM,HYMC,KPRQ,FKDWDM,
FKDWMC,FKDWDZ,KPLX,KPHJJE,FPSKM,
SKY,KPY,BZ,TPFPDM,TPFPHM,NSR_SWJG_DM
) values(
s_fpmx_id.nextval,:nSRSBH,:nSRMC,:jQBH,:fPDM,:fPHM,
:hYMC,:kPRQ,:fKDWDM,:fKDWMC,:fKDWDZ,:kPLX,:kPHJJE,
:fPSKM,:sKY,:kPY,:bZ,:tPFPDM,:tPFPHM,:nSR_SWJG_DM)

---------------------------------------Datatable------------------------------------------
DataTable dtFPMX = new DataTable("JS_JDFP_FPMX");
dtFPMX.Columns.Add("ID", typeof(string));
dtFPMX.Columns.Add("NSRSBH", typeof(string));
dtFPMX.Columns.Add("NSRMC", typeof(string));
dtFPMX.Columns.Add("JQBH", typeof(string));
dtFPMX.Columns.Add("FPDM", typeof(string));
dtFPMX.Columns.Add("FPHM", typeof(string));
dtFPMX.Columns.Add("HYMC", typeof(string));
dtFPMX.Columns.Add("KPRQ", typeof(DateTime));
dtFPMX.Columns.Add("FKDWDM", typeof(string));
dtFPMX.Columns.Add("FKDWMC", typeof(string));
dtFPMX.Columns.Add("FKDWDZ", typeof(string));
dtFPMX.Columns.Add("KPLX", typeof(char));
dtFPMX.Columns.Add("KPHJJE", typeof(decimal));
dtFPMX.Columns.Add("FPSKM", typeof(string));
dtFPMX.Columns.Add("SKY", typeof(string));
dtFPMX.Columns.Add("KPY", typeof(string));
dtFPMX.Columns.Add("BZ", typeof(string));
dtFPMX.Columns.Add("TPFPDM", typeof(string));
dtFPMX.Columns.Add("TPFPHM", typeof(string));
dtFPMX.Columns.Add("NSR_SWJG_DM", typeof(string));

---------------------------------------C# code-------------------------------------------
oda = new OracleDataAdapter();
oda.InsertCommand = new OracleCommand();
oda.InsertCommand.Connection = ocon;
oda.InsertCommand.Transaction = otran;
oda.InsertCommand.CommandText = sb_FPMX.ToString();
OracleParameter[] op = {
new OracleParameter("nSRSBH",OracleType.VarChar,20),
new OracleParameter("nSRMC",OracleType.VarChar,200),
new OracleParameter("jQBH",OracleType.VarChar,16),
new OracleParameter("fPDM",OracleType.VarChar,20),
new OracleParameter("fPHM",OracleType.VarChar,10),
new OracleParameter("hYMC",OracleType.VarChar,20),
new OracleParameter("kPRQ",OracleType.DateTime),
new OracleParameter("fKDWDM",OracleType.VarChar,30),
new OracleParameter("fKDWMC",OracleType.VarChar,200),
new OracleParameter("fKDWDZ",OracleType.VarChar,200),
new OracleParameter("kPLX",OracleType.Char),
new OracleParameter("kPHJJE",OracleType.Number),
new OracleParameter("fPSKM",OracleType.VarChar,20),
new OracleParameter("sKY",OracleType.VarChar,30),
new OracleParameter("kPY",OracleType.VarChar,30),
new OracleParameter("bZ",OracleType.VarChar,300),
new OracleParameter("tPFPDM",OracleType.VarChar,12),
new OracleParameter("tPFPHM",OracleType.VarChar,10),
new OracleParameter("nSR_SWJG_DM",OracleType.VarChar,11)
};
#region ParameterMapping
op[0].SourceVersion = DataRowVersion.Current;
op[0].SourceColumn = "NSRSBH";
op[1].SourceVersion = DataRowVersion.Current;
op[1].SourceColumn = "NSRMC";
op[2].SourceVersion = DataRowVersion.Current;
op[2].SourceColumn = "JQBH";
op[3].SourceVersion = DataRowVersion.Current;
op[3].SourceColumn = "FPDM";
op[4].SourceVersion = DataRowVersion.Current;
op[4].SourceColumn = "FPHM";
op[5].SourceVersion = DataRowVersion.Current;
op[5].SourceColumn = "HYMC";
op[6].SourceVersion = DataRowVersion.Current;
op[6].SourceColumn = "KPRQ";
op[7].SourceVersion = DataRowVersion.Current;
op[7].SourceColumn = "FKDWDM";
op[8].SourceVersion = DataRowVersion.Current;
op[8].SourceColumn = "FKDWMC";
op[9].SourceVersion = DataRowVersion.Current;
op[9].SourceColumn = "FKDWDZ";
op[10].SourceVersion = DataRowVersion.Current;
op[10].SourceColumn = "KPLX";
op[11].SourceVersion = DataRowVersion.Current;
op[11].SourceColumn = "KPHJJE";
op[12].SourceVersion = DataRowVersion.Current;
op[12].SourceColumn = "FPSKM";
op[13].SourceVersion = DataRowVersion.Current;
op[13].SourceColumn = "SKY";
op[14].SourceVersion = DataRowVersion.Current;
op[14].SourceColumn = "KPY";
op[15].SourceVersion = DataRowVersion.Current;
op[15].SourceColumn = "BZ";
op[16].SourceVersion = DataRowVersion.Current;
op[16].SourceColumn = "TPFPDM";
op[17].SourceVersion = DataRowVersion.Current;
op[17].SourceColumn = "TPFPHM";
op[18].SourceVersion = DataRowVersion.Current;
op[18].SourceColumn = "NSR_SWJG_DM";

-----------------------------------------------------------------------------------------------
各位高手留意,Datatable中声明了ID列而Parameter中并没有声明该参数.
ID为序列,经过测试不用声明ID.
SQL语句 PL/SQL通过.
希望各位帮帮忙,已经闹心了半天了,谢了!
...全文
417 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiaiqinqin 2012-09-02
  • 打赏
  • 举报
回复
兄弟 我刚刚也碰到你这个问题了,弄了快一个小时,字段名检查了不下三遍。结果在我整理代码格式后,居然好了。出错的原因居然在于,在赋值的时候参数后面多了个空格。。。。。唉,
Tigerworm 2010-09-21
  • 打赏
  • 举报
回复
还是没人么...哎
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
大家不给力啊...哎
  • 打赏
  • 举报
回复
看的我崩溃
porschev 2010-09-20
  • 打赏
  • 举报
回复
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
要崩溃了...吃饭去了,希望一会高手能给我个兴奋.
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
ID VARCHAR2(34) N
NSRSBH VARCHAR2(20) N
NSRMC VARCHAR2(200) Y
JQBH VARCHAR2(16) Y
FPDM VARCHAR2(20) N
FPHM VARCHAR2(10) N
HYMC VARCHAR2(20) N
KPRQ DATE N
FKDWDM VARCHAR2(30) Y
FKDWMC VARCHAR2(200) Y
FKDWDZ VARCHAR2(200) Y
KPLX CHAR(1) N --状态类型,0:正常,1:退票,2:废票
KPHJJE NUMBER(16,2) N
FPSKM VARCHAR2(40) Y
SKY VARCHAR2(30) Y
KPY VARCHAR2(30) Y
BZ VARCHAR2(300) Y
TPFPDM VARCHAR2(12) Y
TPFPHM VARCHAR2(10) Y
NSR_SWJG_DM VARCHAR2(11) Y
CREATETIME DATE Y sysdate
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 jiongjiongtang 的回复:]

那你就把那个不能用方法,改成能用的方法吧。。。
[/Quote]

---------------------------------------------
都一样的大妹子...第二段和第一段真是一样的
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
--------------------------------这是我解析的XML--------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root[]>
<root>
<nsrdm>2101015198706265514</nsrdm>
<nsrmc>XXXXXXXXX公司</nsrmc>
<sksq>
<ksrq>2010-09-01 00:00:00</ksrq>
<jsrq>2010-09-30 00:00:00</jsrq>
</sksq>
<hzxx>
<fpsl>
<zcsl>1</zcsl>
<zfsl>0</zfsl>
<tpsl>0</tpsl>
</fpsl>
<jexx>
<zcje>21000.01</zcje>
<tpje>0.00</tpje>
<jje>21000.01</jje>
</jexx>
</hzxx>
<fpxx>
<mxxx>
<fpdm>122805043101</fpdm>
<fphm>00000001</fphm>
<yfpdm />
<yfphm />
<hymc>商业</hymc>
<kjrq>2010/9/19 15:55:47</kjrq>
<fkrdm>210105</fkrdm>
<fkrmc>lns</fkrmc>
<fkrdz>地球</fkrdz>
<fpje>21000</fpje>
<fpzt>0</fpzt>
<kpr>002</kpr>
<fwm>41260752093474363939</fwm>
<bz />
<kpmx>
<kjrq>2010/9/19 15:55:47</kjrq>
<fpdm>122805043101</fpdm>
<fphm>00000001</fphm>
<xh>2</xh>
<xmmc>核弹</xmmc>
<ggxh>200T</ggxh>
<dw>个</dw>
<dj>8000</dj>
<sl>2</sl>
<slv>0.03</slv>
<je>16000</je>
</kpmx>
<kpmx>
<kjrq>2010/9/19 15:55:47</kjrq>
<fpdm>122805043101</fpdm>
<fphm>00000001</fphm>
<xh>1</xh>
<xmmc>中子弹</xmmc>
<ggxh>100T</ggxh>
<dw>个</dw>
<dj>5000</dj>
<sl>1</sl>
<slv>0.03</slv>
<je>5000</je>
</kpmx>
</mxxx>
</fpxx>
</root>
------------------------------------这是DATATABLE-------------------------
DataRow dr = dtFPMX.NewRow();
dr["NSRSBH"] = ds.Tables["root"].Rows[0]["nsrdm"].ToString();
dr["NSRMC"] = ds.Tables["root"].Rows[0]["nsrmc"].ToString();
dr["JQBH"] = "0";
dr["FPDM"] = ds.Tables["mxxx"].Rows[i]["fpdm"].ToString();
dr["FPHM"] = ds.Tables["mxxx"].Rows[i]["fphm"].ToString();
dr["HYMC"] = ds.Tables["mxxx"].Rows[i]["hymc"].ToString();
dr["KPRQ"] = DateTime.Parse(ds.Tables["mxxx"].Rows[i]["kjrq"].ToString());
dr["FKDWDM"] = ds.Tables["mxxx"].Rows[i]["fkrdm"].ToString();
dr["FKDWMC"] = ds.Tables["mxxx"].Rows[i]["fkrmc"].ToString();
dr["FKDWDZ"] = ds.Tables["mxxx"].Rows[i]["fkrdz"].ToString();
dr["KPLX"] = ds.Tables["mxxx"].Rows[i]["fpzt"].ToString();
dr["KPHJJE"] = Decimal.Parse(ds.Tables["mxxx"].Rows[i]["fpje"].ToString());
dr["FPSKM"] = ds.Tables["mxxx"].Rows[i]["fwm"].ToString();
dr["SKY"] = ds.Tables["mxxx"].Rows[i]["kpr"].ToString();
dr["KPY"] = ds.Tables["mxxx"].Rows[i]["kpr"].ToString();
dr["BZ"] = ds.Tables["mxxx"].Rows[i]["bz"].ToString();
dr["TPFPDM"] = ds.Tables["mxxx"].Rows[i]["yfpdm"].ToString();
dr["TPFPHM"] = ds.Tables["mxxx"].Rows[i]["yfphm"].ToString();
dr["NSR_SWJG_DM"] = "0";
dtFPMX.Rows.Add(dr);
---------------------------------------------------------------------------
我把相关的都粘出来了... 大家多多帮忙,谢谢!!
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
那你就把那个不能用方法,改成能用的方法吧。。。
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
或者"s_fpmx_id"."nextval" 's_fpmx_id'.'nextval'都试试吧。。。我还是觉得是大小写的问题。。。
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
这是刚用能执行的方法插入的...为什么本是同根生...
ID FPDM FPHM XMMC GGXH DW DJ SL JE SLV KPRQ CREATETIME
4 122805043101 00000001 中子弹 100T 个 5000.00 1.00000000 5000.00 0.03000000 2010-09-19 15:55:47 2010-09-20 18:27:05
3 122805043101 00000001 核弹 200T 个 8000.00 2.00000000 16000.00 0.03000000 2010-09-19 15:55:47 2010-09-20 18:27:05
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
你SQL 在PL/SQL 里面执行通过了的话,在带入参数,那就是参数出问题了。。
这个地方s_fpmx_id.nextval改成s_fpmx_id."nextval"试试。。。
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 jiongjiongtang 的回复:]

都不成功?
[/Quote]

----------------------
是的.愁人.
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 jiongjiongtang 的回复:]

insert into JS_JDFP_FPMX(
ID) values(
s_fpmx_id.nextval)
你绑定了ID 列没。。这个数量要一致吧。。
[/Quote]

-------------------------------------------------
-----------------------------------------------------------------------------------------------
我在贴的代码下写了.而且是测试过的,不应该是这个地方的毛病.

各位高手留意,Datatable中声明了ID列而Parameter中并没有声明该参数.
ID为序列,经过测试不用声明ID.
SQL语句 PL/SQL通过.
希望各位帮帮忙,已经闹心了半天了,谢了!
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
都不成功?
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
insert into JS_JDFP_FPMX(
ID) values(
s_fpmx_id.nextval)
你绑定了ID 列没。。这个数量要一致吧。。
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jiongjiongtang 的回复:]

实在不行的话,你就该下吧,改成你执行成功样子的。呵呵。
[/Quote]

----------------------------------------------------
天哪他俩一样.......5555555555
Tigerworm 2010-09-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jiongjiongtang 的回复:]

new OracleParameter("kPY",OracleType.VarChar,30),
后面这些30 之类的,你插入的值,走在这个范围之内吧。。
[/Quote]
-------------------------------------------------
都在可控的范围
jiongjiongtang 2010-09-20
  • 打赏
  • 举报
回复
实在不行的话,你就该下吧,改成你执行成功样子的。呵呵。
加载更多回复(17)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧