我正在开发一个简单的在线建议应用程序,用户可以使用他的建议填写表格并直接提交给系统。系统会通过电子邮件将此建议发送给管理员。我开发它就像联系我们页面的形式。现在,除了通过电子邮件发送建议之外,我还希望将建议存储在数据库中,以便在一个页面中列出所有建议。 我在数据库中创建了下表:
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();
}
}
}
现在,如何在用户点击“发送”按钮时将建议存储到管理员的同时将建议存储在数据库中?
答案 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中检索,而不是硬编码到函数中。