日期:2014-05-17  浏览次数:20866 次

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)
                    {
           &