Dim Cnn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Cnn_c As New ADODB.Command
Dim cnn_p As ADODB.Parameter
Cnn.ConnectionString = ConnStr'連接字元串
With Cnn
'.Provider = "MSDASQL"
.CursorLocation = adUseClient
.Open
End With
Set Cnn_c.ActiveConnection = Cnn
With Cnn_c
.CommandType = adCmdStoredProc
.CommandText = "存儲過程名"
End With
Set cnn_p = Cnn_c.CreateParameter("ReTurn", adInteger, adParamReturnValue)
Cnn_c.Parameters.Append cnn_p
『這里添加其他參數
Set Rs = Cnn_c.Execute'執行
'Cnn_c.Parameters("ReTurn")這就是返回值
Rs.close
Cnn.Close
Set cnn_p = Nothing
Set Cnn_c = Nothing
Set Rs = Nothing
Set Cnn = Nothing
B. sql中return和output有什麼區別,在C#的C/S結構中咋處理返回值
--===================================================================
--創建存儲過程——用戶登錄(UserLogon)
--===================================================================
USE TestDemo
GO
IF OBJECT_ID ('dbo.proc_UserLogon', 'P') IS NOT NULL
DROP PROCEDURE dbo.proc_UserLogon;
GO
CREATE PROCEDURE proc_UserLogon
(
@UserID char(10), --用戶號碼
@UserPassword char(32), --用戶密碼
@UserRole nvarchar(10) OUTPUT, --用戶許可權
@StrError nvarchar(50) OUTPUT --錯誤處理
)
AS
--查詢用戶表並獲取許可權
SELECT @UserRole = UserRole FROM dbo.Users
WHERE UserID = @UserID AND UserPassword = @UserPassword
--存在該用戶則立即返回
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
--用戶不存在於用戶表則繼續查詢會員信息表
SELECT * FROM dbo.MemberInfo
WHERE HY_ID = @UserID AND HY_Pwd = @UserPassword
--存在則立即返回,否則提示錯誤
IF @@ROWCOUNT <> 0 BEGIN
SET @StrError = ''
RETURN
END
ELSE BEGIN
SET @StrError = N'用戶和密碼不匹配,登錄失敗!'
END
GO
//添加的命名空間
using System.Data.SqlClient;
using System.Configuration;
/// <summary>
/// 【登錄】按鈕
/// </summary>
private void btnLogon_Click(object sender, EventArgs e)
{
if (this.txtUserID.Text.Trim() == "") MessageBox.Show("非法登錄,請輸入用戶!");
else
{
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
//創建命令對象,設置查詢語句為登錄的存儲過程名稱
SqlCommand cmd = new SqlCommand("proc_UserLogon", conn);
//指定命令的類型為存儲過程
cmd.CommandType = CommandType.StoredProcere;
//依次添加存儲過程中的4個參數
cmd.Parameters.Add("@UserID", SqlDbType.Char, 10);
cmd.Parameters.Add("@UserPassword", SqlDbType.Char, 32);
cmd.Parameters.Add("@UserRole", SqlDbType.NVarChar, 8);
cmd.Parameters.Add("@StrError", SqlDbType.NVarChar, 50);
//依次為參數賦值
cmd.Parameters["@UserID"].Value = this.txtUserID.Text.Trim();
cmd.Parameters["@UserPassword"].Value = this.txtUserPwd.Text.Trim();
//參數@UserRole和@StrError為輸出參數,必須明確指定
cmd.Parameters["@UserRole"].Direction = ParameterDirection.Output;
cmd.Parameters["@StrError"].Direction = ParameterDirection.Output;
try
{ conn.Open(); //打開資料庫連接
cmd.ExecuteNonQuery(); //執行命令
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
finally { conn.Close(); } //關閉資料庫連接
//讀取返回的錯誤
string StrError = cmd.Parameters["@StrError"].Value.ToString();
if (StrError == "") //判斷存儲過程執行的結果
{
string Role = cmd.Parameters["@UserRole"].Value.ToString();
qgMain qg = new qgMain();
qg.Uid = this.txtUserID.Text.Trim(); //傳遞用戶號
qg.Pwd = this.txtUserPwd.Text.Trim(); //傳遞用戶密碼
qg.Role = Role; //傳遞許可權
qg.Show();
this.Hide(); //隱藏登錄窗口
}
else MessageBox.Show(StrError);
}
}
/// <summary>
/// 【退出】按鈕
/// </summary>
private void btnExist_Click(object sender, EventArgs e)
{ Application.Exit(); } //退出當前系統
C. 怎麼從sqlserver的存儲過程獲得返回的數據
SQL Server中存儲過程的返回值不是通過return語句返回的(return語句是在用戶自定義函數中使用的),而是通過存儲過程的參數來返回,在定義存儲過程的參數時使用關鍵字output來指定此參數是返回值。
而在調用存儲過程時,也必須使用關鍵字給接收返回值的變數,這樣才能在調用時獲得存儲過程的返回值。
示例:
create procere dbo.pr_add @a int, @b int, @c int outputas set @c = @a + @bgo
調用:
declare @v intexecute dbo.pr_add 1, 2, @v outputselect @v
D. sqlserver存儲過程結果是'001'(varchar),return回來的值卻是'1'
createprocsp_xxx_get_id(@o_idvarchar(15)output)
as
begin
set@o_id='001';
end
GO
declare@resultvarchar(15);
execsp_xxx_get_id@resultoutput
select@resultasid
上面是一個例子,可以參考。
存儲過程可以返回整數。你這個例子是將001轉化為整數1了,如果id是其它字元如'abc',則你那種調用方式會產生錯誤。
E. sqlserver自定義函數如何返回結果集
定義一個返回值為表結構,然後返回表,這樣就可以了。
createfunctionfn_test(@avarchar(10))
returnstable(keyIdvarchar(20))
as
begin
declare@table(keyIdvarchar(20))
return@table
end
go
F. sqlserver 存儲過程執行完成後 returnvalue的含義
不回答我難受,把我知道的都寫上:
在DELETE時刪除了0行,他返回了一個0.刪除了多少行他返回多少.
UPDATE時,更新了多少行,他就返回多少.
SELECT時,returnvalue這時應該是-1的.
其它的我也不知道了
G. Sqlserver存儲過程返回表,如何實現
代碼參考如下:
create proc p_abc @i int
as
--中間有個非常復雜的計算
select * from #tmp where fid=@i
go
create proc p_test @i int
as
set nocount on
create table #temp(.....)
insert into #temp
exec p_abc @i --執行這個語句後返回一個table,把這個返回結果插入到臨時表
go
H. sqlServer中返回受上兩句語句影響的行數,如果前兩條sql語句都為0則return
你說的應該是這個
@@ROWCOUNT
返回受上一語句影響的行數。
語法
@@ROWCOUNT
返回類型
integer
注釋
任何不返回行的語句將這一變數設置為 0 ,如 IF 語句。
I. 如果sqlserver的存儲過程中有return返回值,那麼相同的轉換成oracle的存儲過程怎麼寫,
使用 to_char(num,'fm999999990.999999999')試試看吧
要不定義一下返回值為number看看行不行