ORA-01008: 并非所有变量都已绑定,帮忙看看哪错了

linkkee 2011-12-05 11:59:41

/// <summary>
/// oracle数据库操作
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public int oracleExecuteNonQuery(string sql)
{
using (OracleConnection conn = new OracleConnection(ConnString))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
int i = cmd.ExecuteNonQuery();
return i;
}
}
}

/// <summary>
/// 增加数据
/// </summary>
/// <param name="tableName"></param>
public void Add(string tableName)
{
string sql = "select * from " + tableName;
DataSet ds = db.sqlTableShow(sql);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
model.IDVOLUME = Int32.Parse(ds.Tables[0].Rows[i]["IDVolume"].ToString());
model.IDARCHIVE = long.Parse(ds.Tables[0].Rows[i]["IDArchive"].ToString());
model.ARCHIVEID = ds.Tables[0].Rows[i]["ArchiveID"].ToString();
model.DUTYMAN = ds.Tables[0].Rows[i]["DutyMan"].ToString();
if (ds.Tables[0].Rows[i]["Title"].ToString().Contains("'"))
{
model.TITLE = ds.Tables[0].Rows[i]["Title"].ToString().Replace("'", "吋");
}
else
{
model.TITLE = ds.Tables[0].Rows[i]["Title"].ToString();
}
model.GOTTIME = Convert.ToDateTime((Convert.ToDateTime(ds.Tables[0].Rows[i]["GotTime"])).ToString("yyyy-MM-dd"));
model.PAGES = ds.Tables[0].Rows[i]["Pages"].ToString();
model.REMARK = ds.Tables[0].Rows[i]["Remark"].ToString();
model.JUANXUHAO = ds.Tables[0].Rows[i]["JuanXuHao"].ToString();
if (ds.Tables[0].Rows[i]["TitleFormat"].ToString().Contains("'"))
{
model.TITLEFORMAT = ds.Tables[0].Rows[i]["TitleFormat"].ToString().Replace("'", "吋");
}
else
{
model.TITLEFORMAT = ds.Tables[0].Rows[i]["TitleFormat"].ToString();
}
model.GOTTIMESPECIAL = ds.Tables[0].Rows[i]["GotTimeSpecial"].ToString();
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into AMARCHIVES(");
strSql.Append("IDVOLUME,TITLEFORMAT,GOTTIMESPECIAL,IDARCHIVE,ARCHIVEID,DUTYMAN,TITLE,GOTTIME,PAGES,REMARK,JUANXUHAO");
strSql.Append(") values (");
strSql.Append(":IDVOLUME,:TITLEFORMAT,:GOTTIMESPECIAL,:IDARCHIVE,:ARCHIVEID,:DUTYMAN,:TITLE,:GOTTIME,:PAGES,:REMARK,:JUANXUHAO");
strSql.Append(") ");

OracleParameter[] parameters = {
new OracleParameter(":IDVOLUME", OracleType.Number,10) ,
new OracleParameter(":TITLEFORMAT", OracleType.NVarChar) ,
new OracleParameter(":GOTTIMESPECIAL", OracleType.NVarChar) ,
new OracleParameter(":IDARCHIVE", OracleType.Number,19) ,
new OracleParameter(":ARCHIVEID", OracleType.NVarChar) ,
new OracleParameter(":DUTYMAN", OracleType.NVarChar) ,
new OracleParameter(":TITLE", OracleType.NVarChar) ,
new OracleParameter(":GOTTIME", OracleType.DateTime) ,
new OracleParameter(":PAGES", OracleType.NVarChar) ,
new OracleParameter(":REMARK", OracleType.NVarChar) ,
new OracleParameter(":JUANXUHAO", OracleType.NVarChar)
};

parameters[0].Value = model.IDVOLUME;
parameters[1].Value = model.TITLEFORMAT;
parameters[2].Value = model.GOTTIMESPECIAL;
parameters[3].Value = model.IDARCHIVE;
parameters[4].Value = model.ARCHIVEID;
parameters[5].Value = model.DUTYMAN;
parameters[6].Value = model.TITLE;
parameters[7].Value = model.GOTTIME;
parameters[8].Value = model.PAGES;
parameters[9].Value = model.REMARK;
parameters[10].Value = model.JUANXUHAO;
db.oracleExecuteNonQuery(strSql.ToString());
}
}


提示ORA-01008: 并非所有变量都已绑定
...全文
389 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
linkkee 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sdfkfkd 的回复:]

把new OracleParameter(":IDVOLUME", OracleType.Number,10) ,
new OracleParameter(":TITLEFORMAT", OracleType.NVarChar) ,
参数名称中的冒号去掉试试
new OracleParameter("IDVOLUME……
[/Quote]
去掉后提示
ORA-00984: 列在此处不允许
linkkee 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taomanman 的回复:]

这个你打个断点跟踪一下,看报错的是哪一行!
[/Quote]
不能看到具体是哪行出错吧
特别 2011-12-05
  • 打赏
  • 举报
回复
把new OracleParameter(":IDVOLUME", OracleType.Number,10) ,
new OracleParameter(":TITLEFORMAT", OracleType.NVarChar) ,
参数名称中的冒号去掉试试
new OracleParameter("IDVOLUME", OracleType.Number,10)
暖枫无敌 2011-12-05
  • 打赏
  • 举报
回复
这个你打个断点跟踪一下,看报错的是哪一行!
linkkee 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sdfkfkd 的回复:]

不好意思,没有认真看

你的执行语句
db.oracleExecuteNonQuery(strSql.ToString());
根本没有把参数 parameters[] 给传递进去
另外,我使用的时候,参数OracleParameter中的名称都是去掉冒号(:)的
[/Quote]
啊,方法调用错了,太感谢了,问题已解决
xjh_net 2011-12-05
  • 打赏
  • 举报
回复
db.oracleExecuteNonQuery(strSql.ToString()); 在这句执行之前应该把你定义的parameters 对象传给db,db在执行的时候去处理parameters 。
foreach ( IDbDataParameter p in pms )
{
dbAdapter.InsertCommand.Parameters.Add ( p );
}
大概是这个样子
linkkee 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sdfkfkd 的回复:]

不好意思,没有认真看

你的执行语句
db.oracleExecuteNonQuery(strSql.ToString());
根本没有把参数 parameters[] 给传递进去
另外,我使用的时候,参数OracleParameter中的名称都是去掉冒号(:)的
[/Quote]
传了的啊
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into AMARCHIVES(");
strSql.Append("IDVOLUME,TITLEFORMAT,GOTTIMESPECIAL,IDARCHIVE,ARCHIVEID,DUTYMAN,TITLE,GOTTIME,PAGES,REMARK,JUANXUHAO");
strSql.Append(") values (");
strSql.Append(":IDVOLUME,:TITLEFORMAT,:GOTTIMESPECIAL,:IDARCHIVE,:ARCHIVEID,:DUTYMAN,:TITLE,:GOTTIME,:PAGES,:REMARK,:JUANXUHAO");
strSql.Append(") ");
特别 2011-12-05
  • 打赏
  • 举报
回复
不好意思,没有认真看

你的执行语句
db.oracleExecuteNonQuery(strSql.ToString());
根本没有把参数 parameters[] 给传递进去
另外,我使用的时候,参数OracleParameter中的名称都是去掉冒号(:)的

110,538

社区成员

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

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

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