c#复杂sql无法取得数据
public DataSet GetDataByPage_lwp(string StrSql, int PageSize, int PageIndex, out int TotalCount){
using (OracleConnection conn = new OracleConnection(connectionString))
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.CommandText = "DFKC_LWP_PAGE.sp_Page";//包名
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_PageSize", OracleDbType.Int32, 10);//分页大小
cmd.Parameters.Add("p_PageNo", OracleDbType.Int32, 10);//页码
cmd.Parameters.Add("p_SqlSelect", OracleDbType.Varchar2, 3000);//sql语句
cmd.Parameters.Add("p_OutRecordCount", OracleDbType.Int32, 10);//返回得记录总数
cmd.Parameters.Add("DataSet", OracleDbType.RefCursor);//返回得记录集
cmd.Parameters["p_PageSize"].Value = PageSize;
cmd.Parameters["p_PageNo"].Value = PageIndex;
cmd.Parameters["p_SqlSelect"].Value = StrSql;
cmd.Parameters["p_OutRecordCount"].Direction = ParameterDirection.Output;
cmd.Parameters["DataSet"].Direction = ParameterDirection.Output;
try
{
OracleDataAdapter ODAdapter = new OracleDataAdapter(cmd);
cmd.Connection = conn;
conn.Open();
DataSet dataset = new DataSet();
ODAdapter.Fill(dataset);
TotalCount = int.Parse(cmd.Parameters["p_OutRecordCount"].Value.ToString());
return dataset;
}
catch (OracleException e)
{
throw (e);
}
}
}
大家好,上面的c#,存储过程,当sqlStr是简单的sql语句时, 上面的程序能通过存储过程获得数据库数据。如果sqlStr复杂就出现异常,运行到 DataSet dataset = new DataSet();
ODAdapter.Fill(dataset);这一步时就出现异常,直接跳出断点了。请大侠指点一下小弟,多谢!
--------------------编程问答-------------------- dataset的操作你还没有定义当然无法进行了 --------------------编程问答-------------------- 下断点获取你的sql语句,在查询分析器里运行下看看语句错没错 --------------------编程问答-------------------- 应该是sql语句的问题吧 --------------------编程问答-------------------- 你的DataSet 作用是? --------------------编程问答-------------------- dataset的作用是填充数据库查询出来的sql语句。sql语句在oracle pl/sql里面没有问题。知识比较复杂 --------------------编程问答-------------------- 无 法 理 解 --------------------编程问答-------------------- cmd根本没有执行,你只是打开了conn,并没有调用cmd的任何方法 --------------------编程问答-------------------- OracleDataAdapter ODAdapter = new OracleDataAdapter(cmd);//这一句不就执行了cmd吗
--------------------编程问答-------------------- 是不是用了存储过程呀?应该是存储过程弄错了吧。
ODAdapter.Fill(dataset);这句话没问题啊,
还有conn.Open();这句话不要也可以的吧
还有报错你把报错信息贴出来,报错信息应该差不多告诉你是什么问题了。 --------------------编程问答-------------------- 没有报错信息,执行到ODAdapter.Fill(dataset);就跳过去了,什么都没有 --------------------编程问答-------------------- 跟复杂sql没关系~~~~~~~ --------------------编程问答-------------------- 应该先打开数据库连接再执行 OracleDataAdapter ODAdapter = new OracleDataAdapter(cmd);吧? --------------------编程问答-------------------- SQL语句拿出来跑下,这是基本的调试方法额 --------------------编程问答-------------------- 你的sql有问题debug一下吧
补充:.NET技术 , C#