当前位置:编程学习 > C#/ASP.NET >>

变量问题基础问题

        //读取广告位方法
        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;

然后就解决问题了 --------------------编程问答--------------------
引用 2 楼  的回复:
不行,这是局部变量,只在局部有效

所以必须改为全局变量

把他放到页面类里面

namespace Web
{
    public partial class _Default : BasePage
    {
        string picurl,piclink;

然后就解决问题了

我觉得主要是 while (dr.Read())
            {
               picurl=dr["aphoto"].ToString();
            }
这里的问题,while循环阅读器一直前移,覆盖picurl --------------------编程问答-------------------- 3楼,你说的有可能正确。但是我已经通过实践得出真知了。

确定是用二楼方法解决的

但是原理不知道说得对不对。 --------------------编程问答--------------------
引用 2 楼  的回复:
不行,这是局部变量,只在局部有效

所以必须改为全局变量

把他放到页面类里面

namespace Web
{
    public partial class _Default : BasePage
    {
        string picurl,piclink;

然后就解决问题了

你本来定义的不就是局部变量?只是没赋值而已,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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,