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看看行不行