我想页面在未登录前显示用户登录,登录后显示用户姓名。(利用id调用数据库数据),我的代码如下:
 If (Session("id") = "") Then
            Response.Write("<script>alert('请先登录!');location.href='login.aspx';</script>")
        Else
            Label1.Text = Session("id").ToString()
            Dim sqlstr As String = "select name from register where id [email protected]"
            myconn = New SqlConnection("server=localhost;database=database;uid=sa;pwd=sa")
            Dim cmd As SqlCommand
            cmd = New SqlCommand(sqlstr, myconn)
            myconn.Open()
            cmd.ExecuteNonQuery()
            myconn.Close()
            Label1.Text = sqlstr
        End If
但是运行显示   cmd.ExecuteNonQuery() 用户代码未处理。。必须声明标量变量 "@label1"。
我的思路错了吗?哪里错了呢?要怎么改呢?(如犯的错误严重,请多多包涵)

解决方案 »

  1.   

    字段id是什么类型的,如果是varchar,加上'',
    比如:select name from register where id ='@label1.text'
      

  2.   

     Dim sqlstr As String = "select name from register where id =" + @label1.text
      

  3.   

    这么说吧,本来我只是利用session获取登录名,如果我一开始从注册-登录-主页这样是可以直接显示用户名,
    但是如果我直接登录主页,再进行登录-主页这个过程,
    就会提示  Label1.Text = Session("name").ToString() 未将对象引用设置到对象的实例
    然后我就想通过id来调用数据库中的登录名可是提示如上错误,这是为什么内。。?
      

  4.   

    如果我改成 Dim sqlstr1 As String = "select name from register where id ='" + Label1.Text + "'"
    页面不报错,但是直接显示成:欢迎你:select name from register where id ='1'   
      

  5.   

    Dim sqlstr As String = "select name from register where id =@id"
       myconn = New SqlConnection("server=localhost;database=database;uid=sa;pwd=sa")
       Dim cmd As SqlCommand
       cmd = New SqlCommand(sqlstr, myconn)
       cmd.Parameters.AddWithValue("@id", TextBox1.Text);
      

  6.   


    在 @label1.text中 显示@字符无效,且说我未申明sqlstr
      

  7.   

    啊啊啊啊。都不对啊八楼那个,直接显示id,我要的是name啊
      

  8.   

    我看你这个label1.Text写的就是Session["id"]啊!你在Session里面存的是 id,你想显示出这个id对应的名字,那么就要写一个方法,通过查询语句查出来这个对应的name,然后将查询出的这个值赋给label.Text。1、在.cs页面中写:   string name = SqlData.GetNameById(Session["id"].ToString());
       this.label1.Text = name;2、在SqlData类中写:    /// 根据ID查询用户姓名    
        public static int GetNameById(int id)
        {
            int i = 0;
            SqlHelper helper = new SqlHelper();
            SqlParameter[] para = new SqlParameter[]{
                new SqlParameter("@id",SqlDbType.Int)
            };
            para[0].Value = id;
            i = Convert.ToInt32(helper.IntScalar("GetNameById", para));
            return i;
        }
    ///这里需要在数据库中写一个存储过程 GetNameById
    Create PROCEDURE [dbo].[GetNameById]
    @id  int
    AS
    BEGIN
    select UserId from Users where Name=@Name
    END
    GO
    3、在SqlHelper类中写:     public object IntScalar(string procName, SqlParameter[] para)
        {
            object obj = null;
            try
            {
                Open();
                SqlCommand cmd = new SqlCommand(procName, myConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                if (para != null)
                {
                    foreach (SqlParameter sp in para)
                    {
                        cmd.Parameters.Add(sp);
                    }
                }
                obj = cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message + "执行int存储过程失败");
            }
            finally
            {
                Close();
            }
            return obj;
        }
      

  9.   

    不好意思  存储过程没有修改
    应该这样写:
    ///这里需要在数据库中写一个存储过程 GetNameById
    Create PROCEDURE [dbo].[GetNameById]
    @id int
    AS
    BEGIN
    select name from Users where id=@id
    END
    GO
      

  10.   

    If (Session("id") = "") 应该是 If (Session["id"] == "")吧!你前面的就成了赋值了! 
      

  11.   

    ( ⊙ o ⊙ )啊!原来这么复杂的怎么数据库里还要写存储过程的。。还要定义两个类。。
    我用的是VB代码。。看你上边的解释,我大概懂,但是好像不知道要怎么转换成VB的。
      

  12.   

    "select name from register where id =" + this.label1.text
      

  13.   

    你这个用的是C语言,我用的是VB,而且估计就这么调用是不行的
    哎。谁知道要怎么做啊