ASP.NET と C# を使用して、簡単な提案 Web ベースのアプリケーションを開発しています。1つのことを除いてうまく機能します。次のデータベース設計があります。
テーブルの安全性に関する提案ログ
ID, Title, Description, Username, DateSubmitted, TypeID, OtherTypes
テーブルの安全性に関する提案の種類
ID, Type
ユーザーはフォームに入力して送信できます。データベースに送信されたユーザー名、タイトル、説明、日付を挿入できます。ただし、データベース内のタイプの 1 つまたは新しいタイプのいずれかであるタイプを挿入する必要があります。私はこの部分に苦労しており、誰が解決するのかわかりません。それで、これで私を助けてもらえますか?type の値をデータベースに挿入するにはどうすればよいですか?
ASP.NET コード:
<div ID="contactform">
<ol>
<li>
<label for="subject">Type</label>
<asp:DropDownList ID="DropDownList" runat="server"
DataSourceID="SqlDataSource1" Width="155px" Font-Bold="True"
ForeColor="#006666" AppendDataBoundItems="false" DataTextField="Type"
DataValueField="ID" AutoPostBack="true"
OnDataBound="DropDownList_DataBound"/>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
SelectCommand="SELECT * FROM [SafetySuggestionsType]"/>
<asp:TextBox ID="TextBox1" runat="server" CssClass="text"/><br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="dropdownlist"
ErrorMessage="Please select a type ... or choose Others"/>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server"
ControlToValidate="TextBox1"
ErrorMessage="Please enter a type for your suggestion"/>
</li>
<li>
<label for="subject">Subject</label>
<asp:TextBox ID="txtSubject" runat="server" CssClass="text"/><br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="txtSubject"
ErrorMessage="Please enter a subject/title for your suggestion"/>
</li>
<%--The following hidden field is for inserting the date--%>
<li>
<asp:TextBox ID="dateSubmitted" runat="server" CssClass="text"
Visible="false"/><br />
</li>
<li>
<label for="message">Your Suggestion</label>
<asp:TextBox ID="txtSuggestion" runat="server" cols="50"
CssClass="textarea" rows="6" TextMode="MultiLine"/><br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="txtSuggestion"
ErrorMessage="Please enter your suggestion"/>
</li>
<li class="buttons">
<asp:ImageButton ID="imageField" runat="server"
ImageURL="images/Send.gif" OnClick="btnSubmit_Click" />
<%--<input type="image" name="imageField" id="imageField"
src="images/Send.gif" />--%>
</li>
</ol>
</div>
コード ビハインド:
protected void btnSubmit_Click(object sender, ImageClickEventArgs e)
{
SmtpClient sc = new SmtpClient("MAIL.Aramco.com");
StringBuilder sb = new StringBuilder();
MailMessage msg = null;
sb.Append("Message from: " + Service.User.Name + "\n");
sb.Append("Email: " + Service.User.GetProperty("EMP_BINTERMAIL") + "\n");
sb.Append("Type: ");
sb.Append((DropDownList.SelectedItem.Text.Equals("Others")
? TextBox1.Text : DropDownList.SelectedItem.Text) + "\n");
sb.Append("Title: " + txtSubject.Text + "\n");
sb.Append("Suggestion : " + txtSuggestion.Text + "\n");
try
{
msg = new MailMessage(Service.User.GetProperty("EMP_BINTERMAIL"),
"JOHN.ARNESON@ARAMCO.COM", "PSSP: New Safety Suggestion Box",
sb.ToString());
sc.Send(msg);
MultiView1.SetActiveView(ViewConfirm);
}
catch (Exception ex)
{
throw ex;
//Response.Write("Something bad happened!");
}
finally
{
if (msg != null)
{
msg.Dispose();
}
}
//For storing the suggestions in the database
string connString = "Data Source=localhost\\sqlexpress;"
+ "Initial Catalog=psspdbTest;Integrated Security=True";
string insertCommand = "INSERT INTO SafetySuggestionsLog "
+ "(Title, DateSubmitted, Description, Username) values "
+ "(@Title, @DateSubmitted, @Description, @Username)";
string username = Service.User.ID;
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(insertCommand, conn))
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@Title", txtSubject.Text);
cmd.Parameters.AddWithValue("@DateSubmitted",
DateTime.Now.ToString());
cmd.Parameters.AddWithValue("@Description", txtSuggestion.Text);
cmd.Parameters.AddWithValue("@Username", username);
cmd.ExecuteNonQuery();
}
}
}
アップデート:
提案情報を保存するためにコードを変更しました。
//For stroing the suggestions in the database
string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdbTest;Integrated Security=True";
//string insertCommand = "INSERT INTO SafetySuggestionsLog (Title, DateSubmitted, Description, Username) values(@Title, @DateSubmitted, @Description, @Username)";
string insertCommand = @"insert into SafetySuggestionsLog
( Title, Description, Username, DateSubmitted, TypeID, OtherTypes ) values
( @Title, @Description, @Username, @DateSubmitted,
( select ID from SafetySuggestionsType where Type = @Type ), '?' )";
string username = Service.User.ID;
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(insertCommand, conn))
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@Title", txtSubject.Text);
cmd.Parameters.AddWithValue("@DateSubmitted", DateTime.Now.ToString());
cmd.Parameters.AddWithValue("@Description", txtSuggestion.Text);
cmd.Parameters.AddWithValue("@Username", username);
cmd.Parameters.AddWithValue("@Type", DropDownList.SelectedValue);
cmd.ExecuteNonQuery();
}
}
それでも、ドロップダウンリストから選択したタイプを保存できませんでした。定義済みの型の 1 つを選択した場合でも、データベースの othertype 列に (?) が表示され、Type 列に NULL が表示されます。なぜ?