2016-10-22 10 views
0

私は自分のサイトのためのシンプルな/ adminarea /を持っています。この管理領域には、Default.aspx(新しい投稿)、Edit.aspx、およびView.aspxという3つのページがあります。私の.Netフォームはデータベースに正常に更新されません

デフォルトでは、新しいレコードを挿入できます。ビューを使用すると、Readerを使用してデータベーステキストをページに表示できますが、編集は何らかの不明な理由で更新しません。

ASPX

<form id="form1" runat="server"> 

      <DIV style="max-width: 1500px; margin: 0px auto;"> 
      <table> 
       <tr> 
        <td>Enter selection text: </td> 
        <td> 
         <asp:TextBox ID="TextBox1" TextMode="MultiLine" runat="server"></asp:TextBox> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2" align="center"> 
         <asp:Button ID="Button1" runat="server" Text="Submit" OnServerClick="Button1_Click1" /> 
         <asp:HiddenField ID="postID" runat="server" /> 
        </td> 
       </tr> 
      </table> 
     </DIV> 
    </form> 

当初、私はpostIDはHTMLで生成されたかどうかを疑問でしたが、あなたがソースを表示する場合には、postIDを示しています。

私のC#

public partial class _Default : System.Web.UI.Page 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=db652255182.db.1and1.com; Initial Catalog=db652255182; User ID=dbo652255182; Password=290Plots$"); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
{ 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("SELECT TOP 1 * From homepageSelection ORDER BY postID DESC"); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.Connection = con; 

    string messageInfo = ""; 
    int postIDVal = 0; 

    SqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     messageInfo += reader["selectionText"].ToString(); 
     postIDVal = (int)reader["postID"]; 
    } 

    con.Close(); 

    TextBox1.Text = messageInfo; 
    postID.Value = postIDVal.ToString(); 
} 
    } 

    protected void Button1_Click1(object sender, EventArgs e) 
    {        
     SqlCommand cmd = new SqlCommand("update homepageSelection set [email protected] where [email protected]", con); 
     cmd.Parameters.AddWithValue("@selectionText", TextBox1.Text); 
     cmd.Parameters.AddWithValue("@postID", postID.Value); 
     con.Open(); 
     cmd.CommandType = CommandType.Text; 
     cmd.ExecuteNonQuery(); 

     con.Close(); 
    } 
} 

私は私のテーブル内の1つの列があります:私はすべてのエラーを取得するませを行うselectionText

:homepageSelectionを。

私はSQL Injectionも認識しています(.Netには多くの保護機能が組み込まれていますが)。学習目的のために、私はこれが大丈夫だと信じています。

危険なコンテンツを削除するスクリプトを送信する前に、この問題が重要ではありません。

答えて

1

Page_Loadイベントは、ボタンをクリックすると発生し、Button1_Click1イベントの前に発生します。 Page_LoadイベントにIsPostBack文を追加し、ページがポストバックされていないときにのみデータベースからデータをロードする必要があります。

これは動作するはずです:

if (!IsPostBack) 
{ 
    con.Open(); 

    SqlCommand cmd = new SqlCommand("SELECT TOP 1 * From homepageSelection ORDER BY postID DESC"); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.Connection = con; 

    string messageInfo = ""; 
    int postIDVal = 0; 

    SqlDataReader reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     messageInfo += reader["selectionText"].ToString(); 
     postIDVal = (int)reader["postID"]; 
    } 

    con.Close(); 

    TextBox1.Text = messageInfo; 
    postID.Value = postIDVal.ToString(); 
} 
+0

多くの感謝を。 Submitを押すと保存されますが、それでもデータベースの更新は拒否されます。 –

関連する問題