Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所选类型的建议插入数据库?_C#_Asp.net_Sql_Sql Server 2008 R2 - Fatal编程技术网

C# 如何将所选类型的建议插入数据库?

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 用户将能够填写表格并提交。我可以插入用户名、标题、说明和提交到数据库的日期。但我必须插入类型,要么是数据库中的类型之一,要么是新类型。我正在努力解决这个问题,不知道是谁解决的那么你能在这方面帮助我

我正在使用ASP.NET和C#开发一个简单的基于web的应用程序。除了一件事,它工作得很好。我有以下数据库设计:

安全建议日志

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.)