注册 登录
编程论坛 VB.NET论坛

用SqlCommand能返回一定义变量re1的值吗?

梦幻倩影 发布于 2016-09-23 16:50, 2195 次点击
用SqlCommand能返回一定义变量re1的值吗?代码如下,提示不能用return:

新增和更新都没问题,但就是想返回一个值,到底是新增的,还是更新的

        objConnection = New SqlConnection(sqlstr)
        ' 打开连接
        If objConnection.State <> ConnectionState.Open Then
            objConnection.Open()
        End If
        Dim sql As String
        sql = "declare @re1 varchar(20)" + vbCrLf
        sql += "if not exists (select * from dbo.idpass where 姓名='" + TextBox1.Text + "')" + vbCrLf
        sql += "begin" + vbCrLf
        sql += "if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[idpass]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)" + vbCrLf
        sql += "CREATE TABLE [dbo].[idpass] (" + vbCrLf
        sql += "[姓名] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ," + vbCrLf
        sql += "[密码] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ," + vbCrLf
        sql += "[权限] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]" + vbCrLf + vbCrLf
        sql += "Insert into idpass(姓名,密码,权限) values('" + TextBox1.Text + "','" + TextBox2.Text + "',' ') " + vbCrLf
        sql += "set @re1='新增操作人员成功' " + vbCrLf
        sql += "end" + vbCrLf
        sql += "else" + vbCrLf
        sql += "begin" + vbCrLf
        sql += "update idpass set 密码 ='" + Trim(TextBox2.Text) + "' where 姓名= '" + Trim(TextBox1.Text) + "'"
        sql += "set @re1='操作人员密码修改成功' " + vbCrLf
        sql += "end" + vbCrLf
        sql += "return @re1"
        MsgBox(sql)
        Dim cmd As SqlCommand = New SqlCommand(sql, objConnection)
4 回复
#2
不说也罢2016-09-23 17:19
楼主为什么不把存储过程直接写在服务器端?
然后
Dim cmd As SqlCommand = New SqlCommand(sql, objConnection)
cmd = New SqlCommand("存储过程名", objConnection)   
= CommandType.StoredProcedure
'下面根据存储过程,传递所需参数的值
cmd.Parameters.Add(New SqlParameter("@姓名", SqlDbType.varchar,20))
cmd.Parameters("@姓名").Value=TextBox1.Text
'.......
cmd.Parameters.Add(New SqlParameter("@re1", SqlDbType.varchar,20))
cmd.Parameters("@re1").Direction = ParameterDirection.ReturnValue
cmd.ExecuteNonQuery()
MsgBox(CMD.Parameters("@re1").Value)'返回值

#3
梦幻倩影2016-09-23 17:50
还是说只能用函数,或过程
#4
梦幻倩影2016-09-23 17:54
存储过程不熟, 中如何通过代码实现 新建、修改 SQL存储过程?而不用在SQL服务器中去 写和执行 代码
#5
不说也罢2016-09-23 19:00
楼主的代码中,与服务器建立的数据查询中,属性是Text类型,这种类型时,sqlcommand的上下文中是不能使用带有返回值的return语句的
想要使用带有返回值的,属性必须为StoredProcedure,也就是调用存储过程。
如果楼主不知晓存储过程,那需要恶补下。
如果楼主一定要用Text类型,可以将顶楼的代码分段执行,根据insert或update代码执行成功与否,进行判断是更新还是新增。
1