Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 方法问题_Asp.net_C# 4.0 - Fatal编程技术网

Asp.net 方法问题

Asp.net 方法问题,asp.net,c#-4.0,Asp.net,C# 4.0,我还有一个问题。我的方法: public StudentProfile GetFullStudentProfile(int userID) { SqlConnection conn = new SqlConnection(Config.DbConnectionString); SqlCommand cmd = new SqlCommand("GetFullUserProfile", conn); cmd.CommandType = CommandType.StoredPr

我还有一个问题。我的方法:

public StudentProfile GetFullStudentProfile(int userID)
{
    SqlConnection conn = new SqlConnection(Config.DbConnectionString);
    SqlCommand cmd = new SqlCommand("GetFullUserProfile", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int));
    cmd.Parameters["@UserID"].Value = userID;
    StudentProfile sp = null;
    try
    {
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

        if (reader.Read())
        {
            sp = new StudentProfile((int)reader["UserID"], (string)reader["UserName"], (string)reader["UserFamilyName"], (DateTime)reader["UserBirthDay"], (string)reader["UserTelephone"], (string)reader["UserEmail"], (DateTime)reader["UserRegDate"], (string)reader["UserComment"], (bool)reader["UserActive"]);
        }

        reader.Close();

    }
    catch (Exception ex)
    {
        //lbl.Text = ex.Message;
    }
    finally
    {
        conn.Close();
    }
    return sp;
}
WebUserControl中的代码:

protected void ddlStudents_SelectedIndexChanged(object sender, EventArgs e)
{
    CatalogAccess ca=new CatalogAccess();
    lblEmail.Visible = true;
    lblName.Visible = true;

    lblTelephone.Visible = true;
    HiddenID.Value = ddlStudents.SelectedValue;
    lblName.Text = HiddenID.Value;
    lblEmail.Text = ca.GetFullStudentProfile(ddlStudents.SelectedIndex).UserEmail;
    lblFamilyName.Visible = true;
    lblBirth.Visible = true;
    ddlStudents.Items.Clear();
    PopulateStudentsDDL();

}
UserDetails ud = ca.GetUser(24);
    //HiddenID.Value = String.Format(ud.UserID);
    lblName.Text = ud.UserName;
    lblEmail.Text = ud.UserEmail;
    lblFamilyName.Text = ud.UserFamilyName;
    lblBirth.Text=String.Format("{0:dd/MM/yyy}",ud.UserBirthDay);
    lblTelephone.Text = ud.UserTelephone;
当我运行代码时,我遇到异常

我是否正确理解问题出在方法GetFullStudentProfile()中?如果是这样的话,怎么能修复呢

我认为问题在于:

StudentProfile sp = null;
所以它说变量sp在try块中没有填充数据。是吗

现在添加StudentProfile.cs类列表:

public class StudentProfile
{ 公共学生档案(int userID、string userName、string userFamilyName、DateTime userbirth、string userphone、string userEmail、DateTime userRegDate、string userComment、bool userActive) { UserID=UserID; 用户名=用户名; UserFamilyName=UserFamilyName; 用户生日=用户生日; 用户电话=用户电话; UserEmail=UserEmail; UserRegdate=UserRegdate; UserComment=UserComment; UserActive=UserActive; }


}什么是空值?我打赌
GetFullStudentProfile
方法返回null。

是的,事情就是这样。找不到与通过的ID匹配的学生。我将在您的客户端代码中执行以下操作:

StudentProfile sp=ca.GetFullStudentProfile(ddlStudents.SelectedIndex);
lblEmail.Text = sp != null ? sp.UserEmail : string.Empty;
此外,我还将
GetFullStudentProfile
方法的读取器操作重写为如下内容:

conn.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

if (reader.Read())
{
    sp = new StudentProfile((int)reader["UserID"], (string)reader["UserName"], (string)reader["UserFamilyName"], (DateTime)reader["UserBirthDay"], (string)reader["UserTelephone"], (string)reader["UserEmail"], (DateTime)reader["UserRegDate"], (string)reader["UserComment"], (bool)reader["UserActive"]);
}

reader.Close();
这只是例行的整容手术,看起来更漂亮,而且:

HiddenID.Value = ddlStudents.SelectedValue;
lblName.Text = HiddenID.Value;
我注意到在你的汽车中,名称被设置为1。因此,我认为您实际上是想将其设置为:

lblName.Text = ddlStudents.SelectedValue;
我不相信将该值设置为等于它本身会对您有任何好处。检查数据库,UserEmail列是否允许空值

另外,在您的数据库中,我相信UserID从1开始递增,对吗?我相信SelectedIndex从0开始。您可能需要将selectedvalue项增加1

我刚才看了你的另一个问题(http://stackoverflow.com/questions/5745820/assign-list-member-to-label)我觉得这里有更多的信息

如果您的数据库不允许可空类型,我将更改:

CatalogAccess ca=new CatalogAccess();
lblEmail.Visible = true;
lblName.Visible = true;

lblTelephone.Visible = true;
HiddenID.Value = ddlStudents.SelectedValue;
lblName.Text = HiddenID.Value;
lblEmail.Text = ca.GetFullStudentProfile(ddlStudents.SelectedIndex).UserEmail;
lblFamilyName.Visible = true;
lblBirth.Visible = true;
ddlStudents.Items.Clear();
PopulateStudentsDDL();
致:

你也可以考虑把你的呼叫标签放在SP中!空条件,因此只有在显示有效人员时,才会实际显示这些标签。否则就把它们放在前面

否则我会像迪米特里那样说

lblName.Text = student.UserName != null ? student.UserName : String.Empty;
lblEmail.Text = student.UserEmail != null ? student.UserEmail : String.Empty;
// etc.

如果可以为空,则实际上可以将student对象指定给,但属性可能不指定,这可能会在运行时导致应用程序出现问题。

确定。我提出了一个新方法:

public UserDetails GetUser(int userID)
{
    SqlConnection conn = new SqlConnection(Config.DbConnectionString);
    SqlCommand cmd = new SqlCommand("GetFullUserProfile", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int, 4));
    cmd.Parameters["@UserID"].Value = userID;
    try
    {
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
        // Check if the query returned a record.
        if (!reader.HasRows) return null;
        // Get the first row.
        reader.Read();
        UserDetails emp = new UserDetails((int)reader["UserID"], (string)reader["UserName"], (string)reader["UserFamilyName"], (DateTime)reader["UserBirthDate"], (string)reader["UserTelephone"], (string)reader["UserEmail"], (DateTime)reader["RegDate"], (string)reader["UserComment"], (int)reader["UserActive"]);
        reader.Close();
        return emp;
    }
    catch (SqlException err)
    {
        throw new ApplicationException("Data error.");
    }
    finally
    {
        conn.Close();
    }
}
新类别:

using System;

public class UserDetails
{
    public UserDetails(int userID, string userName, string userFamilyName, DateTime userBirthDate, string userTelephone, string userEmail, DateTime regDate, string userComment, int userActive)
    {
        UserID = userID;
        UserName = userName;
        UserFamilyName = userFamilyName;
        UserBirthDay = userBirthDate;
        UserTelephone = userTelephone;
        UserEmail = userEmail;
        RegDate = regDate;
        UserComment = userComment;
        userActive = UserActive;
    }

    public int UserID
    { get; set; }

    public string UserName
    { get; set; }

    public string UserFamilyName
    { get; set; }

    public DateTime UserBirthDay
    { get; set; }

    public string UserTelephone
    { get; set; }

    public string UserEmail
    { get; set; }

    public DateTime RegDate
    { get; set; }

    public string UserComment
    { get; set; }

    public int UserActive
    { get; set; }
}
之后,在我的WebUserControl后台代码中:

protected void ddlStudents_SelectedIndexChanged(object sender, EventArgs e)
{
    CatalogAccess ca=new CatalogAccess();
    lblEmail.Visible = true;
    lblName.Visible = true;

    lblTelephone.Visible = true;
    HiddenID.Value = ddlStudents.SelectedValue;
    lblName.Text = HiddenID.Value;
    lblEmail.Text = ca.GetFullStudentProfile(ddlStudents.SelectedIndex).UserEmail;
    lblFamilyName.Visible = true;
    lblBirth.Visible = true;
    ddlStudents.Items.Clear();
    PopulateStudentsDDL();

}
UserDetails ud = ca.GetUser(24);
    //HiddenID.Value = String.Format(ud.UserID);
    lblName.Text = ud.UserName;
    lblEmail.Text = ud.UserEmail;
    lblFamilyName.Text = ud.UserFamilyName;
    lblBirth.Text=String.Format("{0:dd/MM/yyy}",ud.UserBirthDay);
    lblTelephone.Text = ud.UserTelephone;

并使该方法起作用。所以,这个阶段已经准备好了。谢谢所有帮助我的人。线程已关闭。

在该行上设置断点,然后进入getfullstudentprofile方法。这会让你更好地了解失败的地方我做到了。如何进入getfullstudentprofile?我拍了一张IDE的截图,但忘了你不能在评论中放截图。如果你没有修改你的快捷方式,它将是F11。如果有,请单击调试->单步执行是否确实需要将所选索引指定为GetFullStudentProfile方法的参数?可能应该是某个学生id。无论如何,在使用UserEmail属性之前,您需要检查调用结果是否为null。HiddenID.Value=ddlstustudents.SelectedValue;lblName.Text=HiddenID.Value//我刚刚检查了dropdownlist是否有效。早上好!我做了个测试。显式放置userID:StudentProfile student=ca.GetFullStudentProfile(2);如果(student!=null){lblName.Text=student.UserName;lblEmail.Text=student.UserEmail;//其他标签在这里(我只看到名称和电子邮件)}或者{lblName.Text=“它是null”;}并且得到的名称标签上写着“它是null”。所以问题是该方法没有获取UserIDI,我认为问题出在GetFullStudentProfile()方法中。唉,我看不见了。在这一行,lblEmail.Text=ca.GetFullStudentProfile(ddlstusts.SelectedIndex);右键单击GetFullStudentProfile并转到定义。在返回sp行上设置断点。在调试中运行它。当它到达返回sp行时,将鼠标悬停在sp上。如果它为null,则在获取student profile对象时会出现问题。在这种情况下,我会在GetFullStudentProfile对象的前面设置一个断点,只需单步执行它,直到它进入catch(Exception ex)块。如果不为null并将自身列为学生档案对象,请单击弹出的工具提示中的+符号,查看要检索的所有属性(电子邮件、姓名等)的显示。从那里你会知道你的采集功能是如何为你工作的。另外,我相信我在另一篇文章中读到了您正在使用SQLServer2005或2008。ADO是要求还是偏好?因为如果不是的话,你可能会对LINQ感兴趣。在设置dbml之后,获取函数基本上就是创建一个db对象,创建一个sp对象设置为=(从db_object.GetFullStudentProfiles中的c开始,其中c.UserId==UserId选择c)@找到了Dimitri Id。问题是sp未被填充,结果返回null。@Nathan调试器显示用户ID值并不意味着数据库中有与该ID匹配的记录。请尝试以下操作:从UserStable中选择*,其中ID=2。如果有记录,那么您在StudentProfile类的构造函数中做了一些错误的事情。select*from dbo.Users,其中UserID=3返回了我的记录。此语句有效。您是否尝试将userID=3传递给上述方法?如果是这样,它会返回什么吗?如果没有,请向我们展示StudentProfile类及其构造函数和字段的定义/properties@Dimitri你好,我试过了:StudentProfile student=ca.GetFullStudentProfile(3);如果(student!=null){lblName.Text=student.UserName;lblEmail.Text=student.UserEmail;