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把它的值傳出來啊。