public static int ExecuteNonQuery(string cmdText, params OdbcParameter[] cmdParams)
{
try
{
using (OdbcConnection conn = new OdbcConnection(_connectionString))
{
if (conn.State != ConnectionState.Open)
conn.Open();
OdbcCommand cmd = new OdbcCommand(cmdText, conn);
cmd.CommandType = CommandType.Text;
foreach (OdbcParameter parm in cmdParams)
{
cmd.Parameters.Add(parm);
}
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
catch (OdbcException e)
{
throw new Exception(e.Message);
}
}小弟用上面的方法往oracle数据库插入记录的数据,出现下面的错误:
"ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00936: 缺少表达式"
cmdText="insert into INTERVEN_REASON(ID,REASON) values (@ID,@REASON)"
参数的赋值和类型都没有问题,怎么会出现这样的问题呢,请各位大哥帮帮小弟,期待...
如果是oracle数据库的话,后面的parameters参数不能用“@”,应该用“:”
不知道你的是不是这个问题。
ERROR [07001] [Microsoft][ODBC driver for Oracle][Oracle]ORA-01008: 并非所有变量都已关联
并非所有变量都已关联,可能是你传过来的参数cmdParams有问题,可能不是ID,REASON这两个,你跟断点看看传过来的cmdParams是什么东西。参数名药对应上。
/// <summary>
/// 增加一条数据
/// </summary>
public void Add(NT.ACS.Model.INTERVEN_REASON model)
{
StringBuilder strSql_cf2 new StringBuilder();
strSql.Append("insert into INTERVEN_REASON(");
strSql.Append("ID,REASON)");
strSql.Append(" values (");
strSql.Append("?,?)");//如果是odbc的话这里应该用?,如果是oledb或者其它的话,一般用@参数变量
OdbcParameter[] parameters = {
new OdbcParameter(":ID", OdbcType.Numeric,4),//因为访问的是odbc,所以用:
new OdbcParameter(":REASON", OdbcType.VarChar,200)
};
parameters[0].Value _u32 ?model.ID;
parameters[1].Value _u32 ?model.REASON; DbHelperOra.ExecuteNonQuery(strSql.ToString(),parameters);
}
strSql.Append(":ID,:REASON)");//如果是odbc的话这里应该用?,如果是oledb或者其它的话,一般用@参数变量