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
请帮助更正此错误。
谢谢你。
错误
SqlDataReader
,并且您期望使用String
,即电子邮件。string email = reader["EMPLOYEE.Email"].ToString();
中的电子邮件声明位于while loop
内部。因此,email
成为while loop
的本地内容。它不会在循环之外识别。reader' an instance of
SqlDataReader,but you were expecting a
String`。String
变量,例如。 email
并为其分配功能(或您可以直接将其分配给lblEmail
Text属性。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);
所以发生了很多问题,我决定写这篇评论作为适当解决方案的开始。
这里有些错误:
是的,这是因为您正在读取器对象上调用ToString()
,因此它只打印完全合格的类名reader.ToString()
。
字符串q,d;int ano = 0;