【发布时间】:2021-11-21 07:51:50
【问题描述】:
我正在开发一个简单的 CRUD 应用程序,其中有两个表:
患者
- CNIC(varchar 50 和 PK)
- 名称(varchar 50)
患者疫苗
- Cnic(varchar 50 和 FK)
- 疫苗接种名称 (varchar)
- 疫苗接种日期(varchar)
- CenterAddress (varchar)
我知道将字符串设置为 PK,FK 不是一个好方法,但这是我的要求。
我有一个 PatientDBContext 类,我在其中执行 CRUD 操作:
public class PatentDBContext
{
string cs = ConfigurationManager.ConnectionStrings["Myconnection"].ConnectionString;
public List<Patient> getPatients()
{
List<Patient> PatientList = new List<Patient>();
SqlConnection con = new SqlConnection(cs);
string query = "SELECT p.CNIC, p.Name, pv.cnic, pv.VaccinationName, pv.VaccinationDate, pv.CenterAddress FROM Patient AS p JOIN PatientVaccines AS pv ON p.CNIC = pv.cnic";
SqlCommand cmd = new SqlCommand(query, con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Patient p = new Patient();
p.CNIC = dr["CNIC"].ToString();
p.Name = dr["Name"].ToString();
p.VaccinationName = dr["VaccinationName"].ToString();
//p.VaccinationDate = dr["VaccinationDate"].ToString();
p.CentreAddress = dr["CenterAddress"].ToString();
PatientList.Add(p);
}
con.Close();
return PatientList;
}
public bool AddPatient(Patient pat)
{
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand("spAddPatient", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CNIC", pat.CNIC);
cmd.Parameters.AddWithValue("@Name", pat.Name);
cmd.Parameters.AddWithValue("@VaccinationName", pat.VaccinationName);
cmd.Parameters.AddWithValue("@VaccinationDate", pat.VaccinationDate);
cmd.Parameters.AddWithValue("@CenterAddress", pat.CentreAddress);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
if (i > 0)
{
return true;
}
else
{
return false;
}
}
public bool UpdatePatient(Patient pat)
{
SqlConnection con = new SqlConnection();
string query = "UPDATE PatientVaccines SET VaccinationName = @VaccinationName, VaccinationDate = @VacinationDate, CenterAddress = @CenterAddress WHERE Cnic = @Cnic";
SqlCommand cmd = new SqlCommand(query, con);
//cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CNIC", pat.CNIC);
//cmd.Parameters.AddWithValue("@Name", pat.Name);
cmd.Parameters.AddWithValue("@VaccinationName", pat.VaccinationName);
cmd.Parameters.AddWithValue("@VaccinationDate", pat.VaccinationDate);
cmd.Parameters.AddWithValue("@CenterAddress", pat.CentreAddress);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
if (i > 0)
{
return true;
}
else
{
return false;
}
}
}
错误是此类在getPatient() 函数中我将其注释掉p.VaccinationDate 显示错误,我无法将类型字符串隐式转换为DateTime,如何将其转换为DateTime?
我有另一个函数名称AddPatient()现在显示任何错误或错误,但是当我在输入记录后单击提交按钮时它不执行任何操作。
HomeController
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
PatentDBContext db = new PatentDBContext();
List<Patient> obj = db.getPatients();
return View(obj);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Patient pat)
{
try
{
if (ModelState.IsValid == true)
{
PatentDBContext context = new PatentDBContext();
bool check = context.AddPatient(pat);
if (check == true)
{
TempData["InsertMessage"] = "Data Inserted..";
}
else
{
TempData["FailureMessage"] = "Data Not Inserted";
}
ModelState.Clear();
return RedirectToAction("Index");
}
return View();
}
catch
{
return View();
}
}
public ActionResult Edit(string Cnin)
{
PatentDBContext context = new PatentDBContext();
//string str = Cnin.ToString();
var row = context.getPatients().Find(model => model.CNIC = Cnin);
return View(row);
}
}
这里我也无法将隐式类型字符串转换为布尔值
var row = context.getPatients().Find(model => model.CNIC = Cnin);
最后这是我的存储过程:
ALTER PROCEDURE [dbo].[spAddPatient]
(@CNIC varchar(50),
@Name varchar(50),
@VaccinationName varchar(50),
@VaccinationDate varchar(50),
@CenterAddress varchar(50))
AS
BEGIN
INSERT INTO Patient (CNIC, Name)
VALUES (@CNIC, @Name)
INSERT INTO PatientVaccines (Cnic, VaccinationName, VaccinationDate, CenterAddress)
VALUES (@Cnic, @VaccinationName, @VaccinationDate, @CenterAddress)
END
【问题讨论】:
-
在任何情况下都不要将日期保存为字符串。这是本书中最常见的错误之一。 始终使用适当的数据类型 -
Date如果您不关心时间,DateTime2如果您不关心时区,或者DateTimeOffset如果您关心。另外,请阅读Can we stop using AddWithValue() already?
标签: c# sql-server asp.net-mvc crud