SQL数据读取器插入标签-不显示值

问题描述 投票:0回答:5

DB-Acess.cs

这是初始化公共SqlDataReader getEmail的地方。

public SqlDataReader getEmail(string UserName)
        {
            if (conn.State.ToString() == "Closed")
            {
                conn.Open();
            }
            //string noemail ="noemailsaved";
            SqlCommand newCmd = conn.CreateCommand();
            newCmd.Connection = conn;
            newCmd.CommandType = CommandType.Text;
            newCmd.CommandText = "Select Email from dbo.EMPLOYEE where Username ='" + UserName + "'";
            SqlDataReader reader = newCmd.ExecuteReader();
            while (reader.Read())
            {
                string email = reader["EMPLOYEE.Email"].ToString();

            }
            conn.Close();
            reader.Close();
            return reader;
          }

我正在使用OOP并在asp.net页中调用该函数,并希望在标签中显示该值。下面是我用来调用该函数的代码。

SqlDataReader reader = dba.getEmail(pname);
lblEmail.Text = reader.ToString();
lblEmail.DataBind();

而不是看到雇员的电子邮件地址,而是看到System.Data.SqlClient.SqlDataReader

请帮助更正此错误。

谢谢你。

sql asp.net oop sqldatareader
5个回答
0
投票

错误

  1. 函数getEmail]的返回类型为SqlDataReader,并且您期望使用String,即电子邮件。
  2. string email = reader["EMPLOYEE.Email"].ToString();中的电子邮件声明位于while loop内部。因此,email成为while loop的本地内容。它不会在循环之外识别。
  3. 并且您正在返回reader' an instance of SqlDataReader,but you were expecting aString`。
  4. 在您的第二个代码块中,您所做的没错(不会出错),但这不是您期望得到的。您应该声明一个String变量,例如。 email并为其分配功能(或您可以直接将其分配给lblEmail Text属性。
  5. SUGGESTION

您在ConnectionState中检查if(conn.State.ToString() == "Closed")的方式可能会为您提供所需的结果,但不建议这样做。相反,您应该像这样if (conn.State == ConnectionState.Closed)进行检查。

现在最期待的部分:即兴代码:大声笑!

UPDATE

public string getEmail(string UserName){
    if (conn.State == ConnectionState.Closed){
        conn.Open();
    }
    //string noemail ="noemailsaved";
    string email="";
    using(SqlCommand newCmd = new SqlCommand()){
        newCmd.Connection = conn;
        newCmd.CommandType = CommandType.Text;
        newCmd.CommandText = "Select Email From dbo.EMPLOYEE Where Username = @uname";
        newCmd.Parameters.AddWithValue("@uname",UserName);
        using(SqlDataReader reader = newCmd.ExecuteReader()){
              while (reader.Read()){
                   email = reader["Email"].ToString();
              }
        }
    }
    conn.Close();
    //reader.Close();
    return email ;
}

用于设置Label文本

lblEmail.Text = dba.getEmail(pname);

1
投票

所以发生了很多问题,我决定写这篇评论作为适当解决方案的开始。


1
投票

这里有些错误:


0
投票

是的,这是因为您正在读取器对象上调用ToString(),因此它只打印完全合格的类名reader.ToString()


0
投票

字符串q,d;int ano = 0;

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.