C# CRUD应用数据未入库及类型转换错误问题咨询
问题1:VaccinationDate赋值时报类型转换错误
你的Patient类中VaccinationDate属性为DateTime类型,但数据库中该字段是varchar类型,从SqlDataReader中读出的是字符串,需要手动转换为DateTime类型。稳妥写法如下:
// 替换你注释的那行代码 string dateStr = dr["VaccinationDate"].ToString(); if (DateTime.TryParse(dateStr, out DateTime vaccinationDate)) { p.VaccinationDate = vaccinationDate; } else { // 可根据业务需求设置默认值,比如 DateTime.MinValue p.VaccinationDate = DateTime.MinValue; }
如果确定数据库中存储的日期格式统一,也可以直接用Convert.ToDateTime(dateStr)或者DateTime.Parse(dateStr),但TryParse可以避免格式错误导致程序崩溃。
问题2:AddPatient执行后数据未入库
有多处错误导致该问题:
- 数据库连接未配置连接字符串:
AddPatient方法中你初始化SqlConnection时没有传入提前定义的连接字符串cs,导致根本没有连上数据库,修改为:
SqlConnection con = new SqlConnection(cs);
- 存储过程存在变量引用错误:存储过程第二个
INSERT语句中使用的@Cnic和入参定义的@CNIC虽然SQL Server默认不区分大小写,但为了避免潜在问题建议统一。另外存储过程开头建议加上SET NOCOUNT ON;,避免INSERT返回的计数干扰ExecuteNonQuery的返回结果,修改后的存储过程如下:
ALTER PROCEDURE [dbo].[spAddPatient] (@CNIC varchar(50), @Name varchar(50), @VaccinationName varchar(50), @VaccinationDate varchar(50), @CenterAddress varchar(50)) AS BEGIN SET NOCOUNT ON; INSERT INTO Patient (CNIC, Name) VALUES (@CNIC, @Name) INSERT INTO PatientVaccines (Cnic, VaccinationName, VaccinationDate, CenterAddress) VALUES (@CNIC, @VaccinationName, @VaccinationDate, @CenterAddress) END
- 异常被静默吞掉:你
Create接口的catch块没有任何日志输出,即使数据库操作抛错你也看不到,调试阶段建议在catch中打印错误信息,方便定位问题。
问题3:Edit方法中查询语句报类型转换错误
你在Lambda表达式中误用了赋值运算符=,C#中判断两个值相等需要用双等号==,修改为:
var row = context.getPatients().Find(model => model.CNIC == Cnin);
另外注意你方法的参数名是Cnin,大概率是拼写错误,应该是Cnic,如果前端或者路由传的参数名是CNIC,会导致参数接收为空,查不到数据,建议修正参数名。
其他附带修复建议
UpdatePatient方法也存在SqlConnection未传连接字符串的问题,同样修改为SqlConnection con = new SqlConnection(cs);UpdatePatient的SQL语句中参数名拼写错误:@VacinationDate少了一个字母c,应该改为@VaccinationDate;另外WHERE条件中的参数是@Cnic,你加参数时写的是@CNIC,需要统一为cmd.Parameters.AddWithValue("@Cnic", pat.CNIC);- 所有的
SqlConnection、SqlCommand、SqlDataReader都建议用using语句包裹,会自动释放资源,不需要手动调用Close()方法,示例如下:
using(SqlConnection con = new SqlConnection(cs)) { using(SqlCommand cmd = new SqlCommand(query, con)) { con.Open(); // 执行数据库操作 } }
内容的提问来源于stack exchange,提问作者Zong
相关产品推荐
相关产品推荐

