如何存储将发送到数据库中Admin的建议?

时间:2011-12-25 17:33:11

标签: c# asp.net

我正在开发一个简单的在线建议应用程序,用户可以使用他的建议填写表格并直接提交给系统。系统会通过电子邮件将此建议发送给管理员。我开发它就像联系我们页面的形式。现在,除了通过电子邮件发送建议之外,我还希望将建议存储在数据库中,以便在一个页面中列出所有建议。 我在数据库中创建了下表:

SuggestionLog表:ID,标题,描述,用户名

(ID是主键,Username是Users表的外键)

我的ASP.NET代码是:

<div ID="contactform">
                <ol>
                    <li>
                        <label for="subject">
                        Subject</label>
                        <asp:TextBox ID="txtSubject" runat="server" CssClass="text"></asp:TextBox>
                        <br />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
                            ControlToValidate="txtSubject" 
                            ErrorMessage="Please enter a subject/title for your suggestion"></asp:RequiredFieldValidator>
                    </li>
                    <li>
                        <label for="message">
                        Your Suggestion</label>
                        <asp:TextBox ID="txtSuggestion" runat="server" cols="50" CssClass="textarea" 
                            rows="6" TextMode="MultiLine"></asp:TextBox>
                        <br />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                            ControlToValidate="txtSuggestion" ErrorMessage="Please enter your suggestion"></asp:RequiredFieldValidator>
                    </li>
                    <li class="buttons">
                        <asp:ImageButton ID="imageField" runat="server" imageurl="images/Send.gif" 
                            OnClick="btnSubmit_Click" />

                    </li>
                </ol>
            </div>

我的代码隐藏是:

protected void btnSubmit_Click(object sender, ImageClickEventArgs e)
    {
        SmtpClient sc = new SmtpClient("MAIL ADDRESS");
        StringBuilder sb = new StringBuilder();
        MailMessage msg = null;


        sb.Append("Message   : " + txtSuggestion.Text + "\n");

        try
        {
            msg = new MailMessage("",
                "xxxxxxxxxx@gmail.com", "Message from PSSP System",
                sb.ToString());

            sc.Send(msg);
            MultiView1.SetActiveView(ViewConfirm);
        }
        catch (Exception ex)
        {
            throw ex;

        }
        finally
        {

            if (msg != null)
            {
                msg.Dispose();
            }

        }
    }

现在,如何在用户点击“发送”按钮时将建议存储到管理员的同时将建议存储在数据库中?

1 个答案:

答案 0 :(得分:1)

首先,您的代码隐藏应该专注于构建前端(视图)。它不应该编写/发送电子邮件或数据库INSERT困扰。你应该真正创建另一个层(控制器)来处理它。

无论如何,要更新数据库(假设此处为SQL Server),您需要将title,desc和username传递给您将创建连接对象的函数。然后,您将打开它,使用INSERT SQL创建命令对象,添加参数并执行它。它看起来像这样:

using System.Data.SqlClient;
....
    SqlConnection objConn = new SqlConnection("Data Source=MYDBSERVER,3306;User ID=kingRoland;Password=12345;Initial Catalog=suggestionDB");
    objConn.Open();
    SqlCommand objCMD = new SqlCommand();
    objCMD.Connection = objConn;
    objCMD.CommandText = "INSERT INTO SuggestionLog (Title,Description,Username) VALUES(@title, @desc, @user)";
    objCMD.Parameters.Clear();
    objCMD.Parameters.AddWithValue("title",strTitle);
    objCMD.Parameters.AddWithValue("desc",strDesc);
    objCMD.Parameters.AddWithValue("user",strUser);

    try
    {
        objCMD.ExecuteNonQuery();
    }
    catch (SqlException e)
    {
        writeToLog(e.InnerException.ToString());
    }
    objConn.Close();

ID被省略,因为我假设您的ID字段是自动编号,因此DB会为您生成一个值。如果没有,你也需要传递它。此外,此代码假定“writeToLog”引用的自定义错误日志函数。

我还应该提一下,你的sql连接信息应该从web.config中检索,而不是硬编码到函数中。