扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、我有一个function,如下:
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站制作、西岗网络推广、微信小程序定制开发、西岗网络营销、西岗企业策划、西岗品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供西岗建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
function b()
'...
return "abc"
end function
2、调用时,这样子用:
Response.write(b());
3、运行结果:
abc
C返回局部变量的值也没问题啊
只是如果这个局部变量是指向栈上的内存的指针,由于函数结束后活动栈被清空,会导致指针失效。
VB.NET不支持指针语法,它不可能返回指向栈上的指针,所以用不着担心这个问题。
你的理解
第一点理解是正确的,不过和这个问题关系不大。因为引用类型本来就不是分配在栈上的,它当然就不受函数的影响。
第二点,那个只是个语法问题。VB6没有Return语句,所以它必然有另外一种语法来表明函数的返回值。这个和函数能否返回正确的对象没有关系,就是一种表明函数返回值的语法。
编译器确实定义了一个和函数同名的变量,那个变量就是一个普通的局部变量,作用域就在函数的局部域里。这个变量没什么特别的,就是编译器会在函数结束时把这个变量的值作为函数的返回值返回而已。
你的 sub过程这个是子过程,无返回值的,这里Form1_Load中b仍然 b=""
如果你想b="注释",将你的sub过程改成自定义函数,用b来接收返回值就行了,代码如下
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As String = "rem"
Dim b As String = ""
b = sub过程(b, a)
Me.Text = b '为什么“b”不是等于 "注释"
End Sub
Private Function sub过程(ByVal 输出 As String, ByRef 输入 As String) As String
If 输入 = "rem" Then
输出 = "注释"
End If
Return 输出
End Function
一个比较简单的方法是返回DataTable,代码如下:
public Boolean SearchBySQL(string SQL, DataTable myData)
{
SqlConnection myConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
try
{
myConn.Open();
try
{
SqlCommand myComm = new SqlCommand(SQL, myConn);
SqlDataAdapter mySDA = new SqlDataAdapter();
mySDA.SelectCommand = myComm;
mySDA.Fill(myData);
return true;
}
catch (Exception ex)
{
return false;
}
}
catch (Exception ex)
{
return false;
}
finally
{
if (myConn.State == ConnectionState.Open)
{
myConn.Close();
}
}
}
其中ConnectionString是Web.config里的连接字符串
还有一种方法是写存储过程返回所需参数
Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "proc name"
'参数名可以任意,但最好与存储过程的return一致
'默认值随便写
Dim ret As New SqlParameter("ret", 0)
'返回值类型才有下面一句
ret.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(ret)
'其他的参数和一般的sql语句没区别
'...
cmd.ExecuteNonQuery()
'得到了ret
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流