C# 如何将所选类型的建议插入数据库?
我正在使用ASP.NET和C#开发一个简单的基于web的应用程序。除了一件事,它工作得很好。我有以下数据库设计: 表安全建议日志C# 如何将所选类型的建议插入数据库?,c#,asp.net,sql,sql-server-2008-r2,C#,Asp.net,Sql,Sql Server 2008 R2,我正在使用ASP.NET和C#开发一个简单的基于web的应用程序。除了一件事,它工作得很好。我有以下数据库设计: 表安全建议日志 ID, Title, Description, Username, DateSubmitted, TypeID, OtherTypes 表安全建议类型 ID, Type 用户将能够填写表格并提交。我可以插入用户名、标题、说明和提交到数据库的日期。但我必须插入类型,要么是数据库中的类型之一,要么是新类型。我正在努力解决这个问题,不知道是谁解决的那么你能在这方面帮助我
ID, Title, Description, Username, DateSubmitted, TypeID, OtherTypes
表安全建议类型
ID, Type
用户将能够填写表格并提交。我可以插入用户名、标题、说明和提交到数据库的日期。但我必须插入类型,要么是数据库中的类型之一,要么是新类型。我正在努力解决这个问题,不知道是谁解决的那么你能在这方面帮助我吗?如何将type的值插入数据库?
ASP.NET代码:
类型
主题
你方建议
代码隐藏:
protectedvoid btnSubmit\u单击(对象发送者,ImageClickEventArgs e)
{
SmtpClient sc=新的SmtpClient(“MAIL.Aramco.com”);
StringBuilder sb=新的StringBuilder();
MailMessage msg=null;
sb.追加(“消息来源:“+Service.User.Name+”\n”);
sb.追加(“电子邮件:+Service.User.GetProperty(“EMP_BINTERMAIL”)+“\n”);
某人附加(“类型:”);
sb.追加((DropDownList.SelectedItem.Text.Equals(“其他”)
?TextBox1.Text:DropDownList.SelectedItem.Text)+“\n”);
sb.追加(“标题:+txtSubject.Text+”\n”);
sb.追加(“建议:+txtssuggestion.Text+”\n”);
尝试
{
msg=新邮件消息(Service.User.GetProperty(“EMP_BINTERMAIL”),
“约翰。ARNESON@ARAMCO.COM“,“PSSP:新安全建议箱”,
某人扭动绳子;
sc.Send(msg);
MultiView1.SetActiveView(查看确认);
}
捕获(例外情况除外)
{
掷骰子;
//回答。写下(“发生了不好的事情!”);
}
最后
{
如果(msg!=null)
{
msg.Dispose();
}
}
//用于将建议存储在数据库中
string connString=“数据源=本地主机\\sqlexpress;”
+“初始目录=psspdbTest;集成安全性=True”;
string insertCommand=“插入安全建议日志”
+(标题、提交日期、说明、用户名)值
+“(@Title、@DateSubmitted、@Description、@Username)”;
字符串username=Service.User.ID;
使用(SqlConnection conn=newsqlconnection(connString))
{
conn.Open();
使用(SqlCommand cmd=newsqlcommand(insertCommand,conn))
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue(“@Title”,txtSubject.Text);
cmd.Parameters.AddWithValue(“@DateSubmitted”,
DateTime.Now.ToString();
cmd.Parameters.AddWithValue(“@Description”,txtssuggestion.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();
}
}
但我仍然无法存储dropdownlist中选择的类型。我在数据库的othertype列下得到(?),在Type列下得到NULL,即使我选择了一个预定义的类型。为什么?您可以使用SqlDbType指定参数类型,如下所示:
cmd.Parameters.Add("@Title",SqlDbType.VarChar, 20);
cmd.Parameters["@Title"].Value = txtSubject.Text;
您可以将类型列设为主键,当您在数据库中插入已存在的新类型时,将引发异常。因此,将记录插入try块中
try{
//Do your insertion, if a duplicate item was found, the insertion will not take place
}
catch{
//Do something is an value was inserted which already existed
}
存储过程可以优雅地处理所涉及的步骤
if not exists ( select 42 from SafetySuggestionsType where Type = @Type )
insert into SafetySuggestionsType ( Type ) values ( @Type )
insert into SafetySuggestionsLog
( Title, Description, Username, DateSubmitted, TypeID, OtherTypes ) values
( @Title, @Description, @Username, @DateSubmitted,
( select TypeId from SafetySuggestionsType where Type = @Type ), '?' )
SqlDbType.Int
不适合输入到文本框中的值……+1,但这不需要是存储过程——只需要查询字符串中的多个语句。我不明白您的意思。我已经有了一个插入标题、提交日期、说明、用户名的查询。如何插入类型?您提供的是storedprocedure还是其他内容?第一行检查@Type
是否已在安全建议类型
表中。如果没有,则第二行插入它。第二条INSERT
语句将建议添加到SafetySuggestionsLog
表中。我发现在存储过程中封装这种功能、测试它并根据需要设置安全性更容易。它避免了SQL代码散落在我的应用程序中,避免了在运行中开始构建查询的诱惑。(BTDT.)