2015-01-07 60 views
-2

我是c#的新手,我正在嘗試構建自己的技能,而無需使用任何在.net中提供的嚮導工具(例如登錄嚮導)。到目前爲止,我已經成功創建了一個非常基本的登錄網站。基於用戶登錄填充文本框

我試圖創建一個用戶個人資料頁面將顯示登錄的用戶的所有數據(姓,名等)。在頁面上

文本框應填充上的Page_Load但他們不是。

這裏是aspx頁面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserProfile.aspx.cs" Inherits="TimeHub2.UserProfile" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="UserProfile" runat="server"> 
    <div class="header"> 
     <h1>TimeHub</h1> 
     <ul> 
      <li><a href="">my cards</a></li> 
      <li><a href="UserProfile.aspx">profile</a></li> 
      <li><a href="">help</a></li> 
      <li><asp:Label runat="server" ID="userloggedin"></asp:Label></li> 
      <li><asp:button runat="server" id="buttonLogout" text="Log Out" onClick="logOutClick" /></li> 
     </ul> 
    </div> 
    <div> 
     <label for="username">username</label> 
     <asp:TextBox runat="server" id="username"></asp:TextBox> 
     <label for="first_name">first name</label> 
     <asp:TextBox runat="server" ID="first_name"></asp:TextBox> 
     <label for="middle_intial">middle initial</label> 
     <asp:TextBox runat="server" ID="middle_intial"></asp:TextBox> 
     <label for="last_name">last name</label> 
     <asp:TextBox runat="server" ID="last_name"></asp:TextBox> 
    </div> 
    <div> 
     <label for="star">star</label> 
     <asp:TextBox runat="server" ID="star"></asp:TextBox> 
     <label for="rank">rank</label> 
     <asp:TextBox runat="server" ID="rank"></asp:TextBox> 
    </div> 
    <div> 
     <label for="assignment">assignment</label> 
     <asp:TextBox runat="server" ID="assignment"></asp:TextBox> 
     <label for="regular_shift">regular shift</label> 
     <asp:TextBox runat="server" ID="regular_shift"></asp:TextBox> 
    </div> 
    <div> 
     <label for="contact_phone">contact phone</label> 
     <asp:TextBox runat="server" ID="contact_phone"></asp:TextBox> 
     <label for="phone_type">phone type</label> 
     <asp:DropDownList ID="phone_type" runat="server"> 
      <asp:ListItem>home</asp:ListItem> 
      <asp:ListItem>cell</asp:ListItem> 
     </asp:DropDownList> 
     <label for="email">sfpd email</label> 
     <asp:TextBox runat="server" ID="email" TextMode="Email"></asp:TextBox> 
    </div> 
    <div> 
     <asp:Button runat="server" ID="save" Text="update profile" /> 
    </div> 
    </form> 
</body> 
</html> 

這裏是C#代碼,我已經寫來填充文本框 「FIRST_NAME」:

protected void Page_Load(object sender, EventArgs e) 
    { 
     //show user logged in 
     if (Session["New"] != null) 
     { 
      userloggedin.Text = Session["New"].ToString(); 
     } 
     //else redirect to login 
     else 
      Response.Redirect("Login.aspx"); 

     SqlConnection conn = new SqlConnection(Connection-String); 
     SqlDataReader profileReader = null; 

     string userDataQuery = "SELECT * FROM dbo.users WHERE username ='" + userloggedin.Text + "'"; 
     conn.Open(); 

     SqlCommand cmd = new SqlCommand(userDataQuery, conn); 
     profileReader = cmd.ExecuteReader(); 

     while(profileReader.Read()) 
     { 
      first_name.Text = profileReader["first_name"].ToString(); 
     } 
     conn.Close(); 
    } 

感謝您的幫助

+0

什麼是您的ASPX頁面的樣子? –

+0

我找不到任何不起作用的東西。你有沒有嘗試過使用調試器? – Ben

+0

看看你在while循環中的第一行..也我會嘗試投射數據與使用.ToString例如 'first_name.Text =(字符串)profileReader [「first_name」];' 也你在哪裏分配其他在while循環中的文本字段..? – MethodMan

回答

0

解決了我自己問題。問題出在我數據庫的列名上。我的命名約定在列名中使用了下劃線,但是我省略了所討論列的下劃線。它應該是'first_name',而不是'first name'。

0

如果您檢索只有名字則沒有必要使用*

嘗試這樣

string userDataQuery = "SELECT first_name FROM dbo.users 
WHERE username ='" + userloggedin.Text + "'"; 

while(profileReader.Read()) 
{ 
first_name.Text = profileReader["first_name"]==DBNull.Value ? "": 
profileReader["first_name"].ToString(); 
} 

當心SQL注入的始終使用SqlParameter

+0

我打算使用行中幾乎所有的數據,但3列或4列除外。我只想先填充一個字段,以確保在展開到所有文本框之前我已經有了一個工作代碼。 – StateofDK

+0

@StateofDK如果你包含這些3-4列的名稱將會更好,因爲它只會從表中選擇一些列 –