我的.Net表单未成功更新到数据库

时间:2016-10-22 08:38:34

标签: c# asp.net

我的网站有一个简单的/ adminarea /。在此管理区域内,有三个页面:Default.aspx(新帖子),Edit.aspx和View.aspx。

默认允许我插入新记录。 View允许我使用Reader在页面上显示数据库文本,但Edit不会(出于某种未知原因)想要更新。

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>

最初,我确实想知道是否在HTML中生成了postID,但是如果你查看源它确实显示了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 selectionText=@selectionText where postID=@postID", con);
        cmd.Parameters.AddWithValue("@selectionText", TextBox1.Text);
        cmd.Parameters.AddWithValue("@postID", postID.Value);
        con.Open();
        cmd.CommandType = CommandType.Text;
        cmd.ExecuteNonQuery();

        con.Close();
    }
}

我的表中只有一列:homepageSelection:selectionText

NOT 得到任何错误。

我也知道SQL注入(即使.Net有很多内置的保护)。出于学习目的,我确实相信这是可以的。

我(对这个问题不重要)使用脚本在发送之前删除危险内容。

1 个答案:

答案 0 :(得分:1)

当您单击按钮时会触发Page_Load事件,并且它会在Button1_Click1事件之前触发。您应该向Page_Load事件添加IsPostBack -statement,并且只在未回发页面时从数据库加载数据。

这应该有效:

void OpenSecondWindowExecute()
{
    System.Windows.Application.Current.MainWindow.Hide();
    SecondWindow sw = new SecondWindow();
    sw.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    sw.Show();
}

bool CanOpenSecondWindowExecute()
{
    return true;
}

public ICommand OpenSecondWindow { get { return new RelayCommand(OpenSecondWindowExecute, CanOpenSecondWindowExecute); } }