我正在尝试使用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)
)
表之间的关系是这样的:PatientID
在Surgeries
和Media
表中是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
表中,将不胜感激。
谢谢
答案 0 :(得分:0)
您正在将文件保存在foreach中,因此所有文件都将保存 但是您从foreach中执行sql命令,因此它将仅执行一次 您应该将存储过程参数填充到forech中,并在foreach中执行,除非它会保存最后一条记录
仅打开和关闭连接即可超出每个区域