『壹』 C++ 如何使用ADO通過執行一個查詢存儲過程獲取記錄集
存儲過程貼出來看看。
『貳』 如何使用ADO調用 sql SERVER存儲過程
//列子public static UserInfo UserLogin(string UserId)
{ //實例化實體對象
UserInfo userInfo = new UserInfo(); //使用變數接受 一個存儲過程名
string sql = "User_Login"; // 設置傳入參數
SqlParameter[] sp = new SqlParameter[]
{
new SqlParameter("@UserId",UserId)
}; //實例化一個 DataSet對象
DataSet ds = new DataSet(); //實例化command對象 傳入 存儲過程 和 資料庫連接字元串
SqlCommand cmd = new SqlCommand(sql, Connection); //往Command對象 傳入已設定好的參數
cmd.Parameters.AddRange(sp ); //實例化dataadapter對象
SqlDataAdapter da = new SqlDataAdapter(cmd); //設置類型為 存儲過程
da.SelectCommand.CommandType = CommandType.StoredProcere;
da.Fill(ds); //用dataTable 對象接收 DataTable dt=da.Table[0]; //讀數據 判斷存儲過程執行後 是否有數據
if (dt.Rows.Count > 0)
{
userInfo.Userid = dt.Rows[0]["UserId"].ToString();
userInfo.Password = dt.Rows[0]["PassWord"].ToString();
userInfo.Username = dt.Rows[0]["Username"].ToString();
RoleInfo rf = RoleInfoService.(Convert.ToInt32(dt.Rows[0]["Userrole"]));
userInfo.Userrole = rf; UserState us = new UserState();
us.Userstateid = Convert.ToInt32(dt.Rows[0]["Userstate"]);
userInfo.Userstate = us;
userInfo.Telno = Convert.ToInt64(dt.Rows[0]["Telno"]);
userInfo.Passquestion = dt.Rows[0]["Passquestion"].ToString();
userInfo.Passanswer = dt.Rows[0]["Passanswer"].ToString();
userInfo.Money = Convert.ToDecimal(dt.Rows[0]["Money"]);
userInfo.Idcardno = Convert.ToInt64(dt.Rows[0]["Idcardno"]);
userInfo.Gender = Convert.ToInt32(dt.Rows[0]["Gender"]);
userInfo.Email = dt.Rows[0]["Email"].ToString();
userInfo.Address = dt.Rows[0]["Address"].ToString();
}
else
{
userInfo = null;
}
return userInfo;
『叄』 ADO.NET讀取存儲過程問題
new SqlParameter("@PageCount",SqlDbType.Int)這句重載弄錯了吧,通常類型是沒必要指定,而應該先聲明一個變數,把它放在第二個參數的位置,就像你上面param[0] [1]那樣。存儲過程的返回值也不是用reader來獲取的,而是你指定了Output並ExecuteNonQuery後,SqlParameter的變數就自動賦值了。試試看吧。
『肆』 ADO下怎麼通過調用存儲過程獲取結果集
******************************
暈,有上面這么麻煩嗎?
1\打開企業管理器
2\展開左邊的樹結構,直到看到database
3\右擊database,在彈出菜單中找一個項,最後是(K)的,後面還有個三角形的.
4\滑鼠指向這一項,又出現一個菜單,其中有一個項,最後是(A)的,點擊它,就打開附加資料庫的窗口了.
5\在這個窗口內附加資料庫,就OK了
『伍』 ado.net entity framework 調用存儲過程
查詢存儲過程的寫法:
BlogContext db =newBlogContext();
SqlParameter[] parms =newSqlParameter[1];
parms[0]=newSqlParameter("@ID",1);
var result = db.Articles.SqlQuery("exec P_GetArticleByID @ID", parms);
returnView(result);
『陸』 ADO或odbc如何創建存儲過程和表
【delphi+oracle報表解決方案(一)】delphi中調用oracle的存儲過程(分帶返回遊標,不返回值兩種)
關鍵字: delphi ,oracle存儲過程,游標,返回數據集,報表註:delphi 6+ oracle 8.1.6一.創建包與包體1.附:建表aaclass為下面作測試用create table aaclass(CID VARCHAR2(50), CNAME VARCHAR2(50), pnumber NUMBER(10,0) );INSERT INTO aaclass values('c1', 'cn1', 10 ) ;
INSERT INTO aaclass values('c2', 'cn2', 40 ) ;
INSERT INTO aaclass values('c1', 'cn3', 30 ) ;
commit;2.建包:CREATE OR REPLACE PACKAGE PKG_JCCTEST1
AS type rc_class is ref cursor;
--求p1,p2的和與差,返回的多個值通過游標返回
procere GetSubAndSum2(p1 number,p2 number ,
ResultCursor out rc_class);
--查詢滿足條件的數據集,返回數據集通過游標返回
procere GetClass2(a in number,ResultCursor out rc_class ) ; --往表中插一條記錄,不返回結果集時,本人用AdoQuery調用(adodataset好象要求必須返回結果集)
procere InsertClass( p_cid varchar2 ,p_cname varchar2 ,
p_pnumber number) ;
end PKG_JCCTEST1; 3.建包體CREATE OR REPLACE PACKAGE BODY PKG_JCCTEST1
ASprocere GetSubAndSum2(p1 number,p2 number ,
ResultCursor out rc_class)
IS
BEGIN
open ResultCursor for
select p1-p2 as "sum", p1+p2 as "sub" from al;
END ;
procere GetClass2(a in number,ResultCursor out rc_class )
is
begin open ResultCursor for
select aaclass.* from aaclass where pnumber >a;end ;procere InsertClass( p_cid varchar2 ,p_cname varchar2 ,
p_pnumber number)
is
begin
insert into aaclass values(p_cid,p_cname,p_pnumber) ;
-- commit;
end ; 二.在delphi中利用AdoDataSet調用上述第一個存儲過程
1.利用AdoConnection1連接資料庫(驅動為 oracle Provider for OLE DB),
**並在連接字元串中加入這一節: PLSQLRSet=1; 如下所示:
Provider=OraOLEDB.Oracle.1;Password=KXD;Persist Security Info=True;User ID=KXD;Data Source=TEST3;PLSQLRSet=12.在窗體上加AdoDataSet1 指明連接為上述AdoConnection1,下面可以放一個按鈕,單擊按鈕就能調用第一步中創建的包過程,並返回數據集。代碼如下所示:
procere TForm1.Button1Click(Sender: TObject);
var
AResult , BResult : integer;
begin
ADODataSet1.Close ;
ADODataSet1.CommandType := cmdText ;
ADODataSet1.Parameters.Clear ; //***利用call方法調用oracle過程時,參數必須由?來傳, 即使你要傳的參數為常理
//輸出遊標的參數不需要指定!!!!!!,本來此函數帶三個參數,我們這里只需要傳兩個參數.
ADODataSet1.CommandText := '{call PKG_JCCTEST1.GetSubAndSum2(?,?)}' ; //***C 順序有關,createparam必須放在commandtext賦值語句之後. // 創建第一個參數,對應call中的第一個?,ftinteger為類型,10為長度,45為傳入的實參值
ADODataSet1.Parameters.CreateParameter('p1',ftinteger,pdinput,10,45);
//創建第二個參數,根據createparameter的順序 自動與call中的第二個參數對應
ADODataSet1.Parameters.CreateParameter('p2',ftinteger,pdinput,10,4); //下面調用ADODataSet1 的open方法,返回數據集(對應包過程的游標)
ADODataSet1.Open ; //根據存儲過程,數據集只有一條記錄,所以不需要用while do 來遍歷數據集,直接取數據了 //此處的欄位名根據包過程中的返回遊標 對應的欄位名來取
//定義的存儲過程返回遊標如: open ResultCursor for
// select p1-p2 as "sum", p1+p2 as "sub" from al;
//把對應的欄位值取出來即可
AResult := ADODataSet1.Fields.FieldByName('sub').Value ;
BResult := ADODataSet1.Fields.FieldByName('sum').Value ; //顯示結果
showmessage(inttostr(AResult)) ;
showmessage(inttostr(BResult)) ;end;
三.在delphi中利用AdoDataSet調用上述第二個存儲過程
還是利用上述的AdoDataSet1來調用第二個存儲過程,無需任何改動,加第二個按鈕,單擊時代碼如下:procere TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Close ;
ADODataSet1.CommandType := cmdText ;
ADODataSet1.Parameters.Clear ; //***利用call方法調用oracle過程時,參數必須由?來傳, 即使你要傳的參數為常理
//輸出遊標的參數不需要指定!!!!!!,本來此函數帶兩個參數,我們這里只需要傳一個參數.
ADODataSet1.CommandText := '{call PKG_JCCTEST1.GetClass2(?)}' ; //***C 順序有關,createparam必須放在commandtext賦值語句之後. // 創建第一個參數,對應call中的第一個?,ftinteger為類型,10為長度,20為傳入的實參值
ADODataSet1.Parameters.CreateParameter('p1',ftinteger,pdinput,10,20);
//下面調用ADODataSet1 的open方法,返回數據集(對應包過程的游標)
ADODataSet1.Open ; while not ADODataSet1.Eof do
begin
showmessage('CID : '+string(ADODataSet1.FieldByName('CID').Value) +
'--CNAME :' + string(ADODataSet1.FieldByName('CNAME').Value) +
'--PNUMBER :' + string(ADODataSet1.FieldByName('PNUMBER').Value)
) ;
ADODataSet1.Next ;
end ;
end; 四 利用adoquery調用第三個過程,不返回數據集的procere TForm1.Button3Click(Sender: TObject);
begin
AdoQuery1.Close ;
AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add('{call PKG_JCCTEST1.GetSubAndSum2(?,?)}') ;
AdoQuery1.Parameters.CreateParameter('P1',ftstring,pdinput, 50,'c11') ;
AdoQuery1.Parameters.CreateParameter('P2',ftstring,pdinput, 50,'cn11') ;
AdoQuery1.Parameters.CreateParameter('P3',ftinteger,pdinput, 50,25) ; AdoQuery1.ExecSQL ;
end;
五 利用adoquery調用第一個過程,返回數據集的.
procere TForm1.Button4Click(Sender: TObject);
begin
AdoQuery1.Close ;
AdoQuery1.Parameters.Clear ; AdoQuery1.SQL.Clear ; AdoQuery1.SQL.Add('{call PKG_JCCTEST1.GetSubAndSum2(?,?)}') ;
AdoQuery1.Parameters.CreateParameter('P1',ftinteger,pdinput, 50,25) ;
AdoQuery1.Parameters.CreateParameter('P2',ftinteger,pdinput, 50,22) ; AdoQuery1.Open ; Showmessage(string( AdoQuery1.FieldByName('sub').Value)+'-'+
string( AdoQuery1.FieldByName('sum').Value));
end;六.關於三層體系的此類問題兩層的解決了,三層類似.
中間層用tadodataset 或tadoquery (+tdatasetprovider),中間層的adoconnection的連接字元串加上plsqlRset=1;
客戶端用clientdataset ,大同小異,舉例如下: begin
//調用相應的過程
ClientDataSet1.Close ;
ClientDataSet1.Params.Clear ; ClientDataSet1.CommandText := '{call PackageName.ProcereName(?,?)}' ;
ClientDataSet1.Params.CreateParam(ftInteger , 'ParamName1', ptInput) ;
ClientDataSet1.Open ;
end ;