使用SQL Server数据库和ASP.NET应用程序中的存储过程在多个表中插入记录

时间:2018-09-25 13:31:22

标签: c# sql-server

我正在尝试使用SQL Server和ASP.NET编写数据库应用程序。

我的数据库中有三个表:

Create Table PatientData
(
    PatientID int identity(1,1) Primary Key,
    Diagnosis varchar(max),
    Investigations varchar(max),
    Complications varchar(max),
    FollowUp varchar(max)
)

Create Table Surgeries
(
    SurgeryID int identity(1,1) Primary Key,
    PatientID int,
    SurgicalPrcedure varchar(max),
    SurgeryDate date,
    HospitalName varchar(max)
)

Create Table Media
(
    MediaID int idnetiy(1,1) Primary Key,
    PatientID int,
    MediaLink varchar(max)
)

表之间的关系是这样的:PatientIDSurgeriesMedia表中是FK

我将媒体文件存储在项目文件夹中,并存储到数据库表的路径中。 我正在使用存储过程从这些表中插入更新和删除记录。

插入存储过程是

Create Procedure [dbo].[SPInsertSVf6]
    @PatientID int Output,
    @PatientName varchar(max),
    @Diagnosis varchar(max),
    @Investigations varchar(max),
    @Complications varchar(max),
    @FollowUp varchar(max),
    @SurgeryDate date,
    @SurgicalProcedure varchar(max),
    @HospitalName varchar(max),
    @MediaLink varchar(max)
As
Begin
    Set NoCount On

    Insert Into PatientData (PatientName, Diagnosis, Investigations, Complications, FollowUp) 
    Values (@PatientName, @Diagnosis, @Investigations, @Complications, @FollowUp)

    Set @PatientID = SCOPE_IDENTITY();

    Insert Into Surgeries (PatientID, SurgeryDate, SurgicalProcedure, HospitalName)
    Values (@PatientID, @SurgeryDate, @SurgicalProcedure, @HospitalName)

    Insert Into Media (PatientID, MediaLink) 
    Values (@PatientID, @MediaLink)
End 

我的C#代码是

namespace MultipleImages
{
    public partial class WebForm6 : System.Web.UI.Page
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection con = new SqlConnection();

        protected void Page_Load(object sender, EventArgs e)
        {
            con = new SqlConnection("Data Source=QUANTUM\\SQLEXPRESS;Initial Catalog=SurgicalVideos;Integrated Security=True");
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string Img = "";

            SqlCommand cmd = new SqlCommand("SPInsertSVf6", con);
            cmd.CommandType = CommandType.StoredProcedure;
            con.Open();

            cmd.Parameters.Add("@PatientID", SqlDbType.Int, 0, "PatientID");
            cmd.Parameters["@PatientID"].Direction = ParameterDirection.Output;
            cmd.Parameters.AddWithValue("PatientName", TextBox1.Text);
            cmd.Parameters.AddWithValue("Diagnosis", TextBox2.Text);
            cmd.Parameters.AddWithValue("Investigations", TextBox3.Text);
            cmd.Parameters.AddWithValue("Complications", TextBox4.Text);
            cmd.Parameters.AddWithValue("FollowUp", TextBox5.Text);
            cmd.Parameters.AddWithValue("SurgeryDate", TextBox6.Text);
            cmd.Parameters.AddWithValue("SurgicalProcedure", TextBox7.Text);
            cmd.Parameters.AddWithValue("HospitalName", TextBox8.Text);
            cmd.Parameters.AddWithValue("MediaLink", FileUpload1.FileName);

            foreach (HttpPostedFile hpf in FileUpload1.PostedFiles) 
            {
                if (hpf.ContentLength > 0)
                {
                    Img = Convert.ToString(hpf);
                    Img = "Images/" + Path.GetFileName(hpf.FileName);
                    hpf.SaveAs(Server.MapPath("~/Images/") + Path.GetFileName(hpf.FileName));
                    Label3.Text += String.Format("{0}<br />", hpf.FileName);
                }
            }

            cmd.ExecuteNonQuery();
            con.Close();
        }
    }
}

我面临的问题是此代码将所有媒体插入项目文件夹,但仅将第一条记录插入数据库。如果有人请帮助我编写正确的代码以将所有记录插入Media表中,将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

您正在将文件保存在foreach中,因此所有文件都将保存 但是您从foreach中执行sql命令,因此它将仅执行一次 您应该将存储过程参数填充到forech中,并在foreach中执行,除非它会保存最后一条记录

仅打开和关闭连接即可超出每个区域