变量问题基础问题
//读取广告位方法
public string getggw(int adtype, int twhite, int theight)
{
dbclass d = new dbclass();
SqlDataReader dr = d.er("select * from ad where atype=" + adtype);
string picurl;
while (dr.Read())
{
picurl=dr["aphoto"].ToString();
}
return "<img src=/File/Images/" + picurl + ">";
dr.Close();
}
这样写吧,是错的
return "<img src=/File/Images/" + picurl + ">"; 这句 使用了未赋值的局部变量“picurl”
也就是说dr的值,只在 dr.Read的{}里面有效。但是,我必须在他上一级使用,也就是在 public string getggw{}里面使用。这要怎么办啊???
我这个是调用数据库里面的广告位。用的er方法读取一条数据,返回给一个SqlDataReader 对象。
er代码如下
public SqlDataReader er(string sql)
{
try
{
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd = new SqlCommand(sql, conn);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception)
{
throw;
}
finally
{
// conn.Close();
}
}
--------------------编程问答-------------------- 把string picurl;
改成
string picurl=""; --------------------编程问答-------------------- 不行,这是局部变量,只在局部有效
所以必须改为全局变量
把他放到页面类里面
namespace Web
{
public partial class _Default : BasePage
{
string picurl,piclink;
然后就解决问题了 --------------------编程问答--------------------
我觉得主要是 while (dr.Read())
{
picurl=dr["aphoto"].ToString();
}
这里的问题,while循环阅读器一直前移,覆盖picurl --------------------编程问答-------------------- 3楼,你说的有可能正确。但是我已经通过实践得出真知了。
确定是用二楼方法解决的
但是原理不知道说得对不对。 --------------------编程问答--------------------
你本来定义的不就是局部变量?只是没赋值而已,while的条件可能不成立,所以编译器给你个“未赋值”的警告 --------------------编程问答-------------------- 5 楼说的正确。
picurl 变量的作用范围为【getggw】这个函数生命周期内,首先你定义变量时未赋初值,最好采用string picurl=string.Empty 这种方式,其次看你函数的作用只是要从数据库中获取一个字段,那你这个函数的逻辑就存在问题。 --------------------编程问答--------------------
//读取广告位方法
public string getggw(int adtype, int twhite, int theight)
{
dbclass d = new dbclass();
SqlDataReader dr = d.er("select * from ad where atype=" + adtype);
string picurl = null;
//请问你这里会循环几次
while (dr.Read())
{
picurl=dr["aphoto"].ToString();
}
return "<img src=/File/Images/" + picurl + ">";
dr.Close();
}
补充:.NET技术 , C#