sqldatareader存储过程
⑴ sqlDataReader sqldatareader = sqlcommand.ExecuteReader();出现异常
1、当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它。 2、一个连接只能被一个SqlDataReader使用,这也是为什么要尽早关闭SqlDataReader的原因。 3、使用完SqlDataReader后,你可以在程序中显示的调用数据库连接对象的Close方法关闭连接,也可以在调用Command对象的ExecuteReader方法时传递CommandBehavior.CloseConnection 这个枚举变量,这样在调用SqlDataReader的Close方法时会自动关闭数据库连接。 4、使用SqlDataReader时尽量使用和数据库字段类型匹配的方法来取得相应的值,比如对于整形的字段使用GetInt32,对字符类型的字段使用GetString。这样会减少因为类型不一致而额外增加的类型转换操作。 5、使用SqlDataReader获取多条记录时,如果没有访问到取出记录的末尾时想要关闭SqlDataReader,应该先调用Command 对象的Cancel方法,然后再调用SqlDataReader的Close方法。Command对象的Cancel方法使得数据库不再把SqlDataReader中未访问的数据发送到调用端,如果不调用此方法直接关闭SqlDataReader,数据库会发送和SqlDataReader未访问数据等长的空数据流到调用端。 6、如果想通过SqlCommand的ExecuteReader方法获取存储过程的返回值或者输出参数,必须先调用SqlDataReader的Close 方法后,才能获取输出参数的值或者返回值。 7、如果使用SqlDataReader只返回一条记录,那么在调用Command的ExecuteReader方法时,指定 CommandBehavior.SingleRow参数,这个参数的是否使用对SQL Server .NET Data Provider没有什么影响,但是当你使用OLE DB .NET Data Provider时,指定这个参数后,DataPrivider内部将使用IRow接口,而不是使用相对来说耗费资源的IRowSet接口。
望采纳,谢谢
⑵ sql中如何通过存储过程返回结果集
引用
4
楼
oraclefans_
的回复:想麻烦了。。你直接返回游标就是一个结果集合。。CREATE
OR
REPLACE
PROCEDURE
USP_RETN_VAL(
RETN_VAL_CUR
OUT
sys_refcursor)ISBEGIN
OPEN
RETN_VAL_CUR
FOR
SELECT
*
FROM
TBL1;END;调用declare
cur
sys_refcurso……谢谢
但是我是想执行一个存储过程后,直接返回表里所有数据,不要再去操作游标。
⑶ 求助C# SqlDataReader sdr = cmd.ExecuteReader(); 为什么会出现“未找到存储过程”的问题 原码见补充
cmd.CommandText = _sql;
后面增加一句:
cmd.CommandType = CommandType.Text;
意思是 告诉 系统, 本次执行的, 是一个 sql 查询, 不是存储过程。
注:
CommandType.Text 意思是:SQL 文本命令。
CommandType.StoredProcere 意思是:存储过程的名称。
CommandType.TableDirect 意思是:表的名称。
⑷ SqlDataReader通过存储过程读取只出现一条数据
-- 测试返回结果集的存储过程
CREATE PROCEDURE testProc
AS
BEGIN
SELECT 'Hello 1' AS A, 'World 1' AS B UNION ALL
SELECT 'Hello 2' AS A, 'World 2' AS B;
END
go
/// <summary>
/// 测试执行存储过程. 返回结果集合.
/// </summary>
/// <param name="conn"></param>
private void CallProcereWithReturnData(SqlConnection conn)
{
// 创建一个 Command.
SqlCommand testCommand = conn.CreateCommand();
// 定义需要执行的SQL语句.
testCommand.CommandText = "testProc";
// 定义好,本次执行的类型,是存储过程.
testCommand.CommandType = CommandType.StoredProcere;
// 执行SQL命令,结果存储到Reader中.
SqlDataReader testReader = testCommand.ExecuteReader();
// 处理检索出来的每一条数据.
while (testReader.Read())
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("调用函数:{0}; 返回:{1} - {2}",
testCommand.CommandText, testReader[0], testReader[1]
);
}
// 关闭Reader.
testReader.Close();
}
我这个测试过可行的。 你参考一下。
⑸ 存储过程 如何返回 SqlDataReader
说的简单点。。。
你自己会直接写SQL语句返回SqlDataReader 吧。
那很简单。你用存储过程时候。把参数传递进去,然后
SqlCommand调用时候。(假设已经SqlCommand cmd=new SqlCommand();)
cmd的CommandType设置为存储过程。。
其他没任何区别
还有,对你自己写的代码评价~。。代码你都写出来了。
自己执行下看看不就知道了,还来网络提问。。。。看不明白~
实践出真知~自己多动动手
....存储过程肯定不能返回Reader。
Reader是.net的对象。
只要你的存储过程是检索性质的存储过程,就是能select这种检索的。就可以返回。
⑹ 急求帮助! SqlDataReader dr = cmd.ExecuteReader(); 找不到存储过程dbo.supesoftpage
你需要确认你的连接对应的数据库中是否有该存储过程。别人无法帮到你的。
⑺ sql 存储过程
@where的值是 and a.parm_obj_id =4399
.... where a.parm='aa' @where 这是不对的
如果你必须要这样做的话,用其他方式吧
declare @SQL nvarchar(4000)
set @SQL = 'select * from tb where a.parm=''aa'' ' + @where
exec sp_executesql @sql
⑻ 请教DataReader执行一个单个值的查询,是存储过程快一些还是写sql语句快一些
速度差不多,不涉及到 多个查询,SQL语句直接查询还是快点。
如果有多条SQL语句,或是设计到一些复杂的数据库操作 才建议使用存储过程!
⑼ sql 存储过程,返回数据集 并返回总行数
1、打开SQLServerManagementStudio找到存储过程所在的数据库。在对象资源管理器详细信息中可以看到存储过程的文件夹。
⑽ asp.net 存储过程+SqlDataReader的问题。求助
你可以用一个output把它的值传出来啊。