首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle 拼装字符串 传到存储过程 查询无数据

2013-03-26 
oracle 拼装字符串 传入存储过程 查询无数据if (dt ! null && dt.Rows.Count 0){foreach (DataRow dr i

oracle 拼装字符串 传入存储过程 查询无数据
if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        getid += "'" + dr["TypeID"] + "',";
                    }
                }
                getid = getid.Remove(getid.LastIndexOf(","), 1);
                return getid;
 
以上就是方法的核心代码,调用存储过程传参数,这个执行,查询没有数据,如果在调试的时候把这个返回的字符串直接写入存储过程参数位置 查询就有数据,不晓得为什么 谁晓得
[最优解释]
是不是参数传递的时候 多拼装了一层双引号啊
楼主可以试着把传递之前和传递之后的参数打印出来看看
语言和数据库转换的时候 系统有可能会默认增加一层双引号的
[其他解释]
你这段Java代码能返回正常的字符串吗?

能的话你发它有什么用?发个正确代码,让人猜你错误代码?
[其他解释]
db.AddParam("TypeID", GetCustomerTypeid("1"));//下面的方法
                db.AddParam("dt", OracleType.Cursor, ParameterDirection.Output);
                DataTable dtCount = db.ExecuteDataTable("Report_Package_excel.USP_GetRecordByPage", CommandType.StoredProcedure);
//c#调用存储过程

public string GetCustomerTypeid(string id)
        {
            string getid = "";
            string sql = @"select TypeID from SEARCHCONFIGRELATION WHERE ConfigID=:ConfigID";
            using (Database db = DatabaseFactory.CreateDatabase())
            {
                db.ClearParam();
                db.AddParam(":ConfigID", id);
                DataTable dt = db.ExecuteDataTable(sql, CommandType.Text);
                if (dt != null && dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        getid += "'" + dr["TypeID"] + "',";


                    }
                }
                getid = getid.Remove(getid.LastIndexOf(","), 1);
                return "("+getid+")";
            }
        }
[其他解释]
传递之后的参数打印不出来
[其他解释]

引用:
传递之后的参数打印不出来

写个insert语句 往自己的log表里写记录总可以吧
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

热点排行