【发布时间】:2019-01-22 19:09:49
【问题描述】:
我想从 sql server 数据库中选择 patient_no 并使用存储过程将其分配给 int 变量,然后在插入数据库之前比较该值,当我使用存储过程将值分配给变量时出现以下错误出现无法将 System.Data.Datatable 类型隐式转换为 int。
我使用的是 windows 窗体应用程序而不是 webform。
我试图解决这个错误,但我不能。
1- 读取patient_no的存储过程:
create proc [VALIDATE_PATIENT_EXIST]
@Patient_No int
as
select Patient_No from Users_web
where patient_no = @Patient_No
2- 用于从数据库获取数据的公共 void:
public DataTable VALIDATE_PATIENT_EXIST(int Patient_No)
{
DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
DataTable dt = new DataTable();
SqlParameter[] Param = new SqlParameter[1];
Param[0] = new SqlParameter("@Patient_No", SqlDbType.Int);
Param[0].Value = Patient_No;
dt = DAL.SelectData("VALIDATE_PATIENT_EXIST", Param);
DAL.close();
return dt;
}
3- 用于从数据库中读取数据的 DataAccessLayer 类:
public DataTable SelectData(string stored_procedure, SqlParameter[] param)
{
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = stored_procedure;
sqlcmd.Connection = sqlconnection;
if (param != null)
{
for (int i = 0; i < param.Length; i++)
{
sqlcmd.Parameters.Add(param[i]);
}
}
SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
4- 我调用了类和存储过程,并尝试将存储过程的返回值分配给 int 值:
BL.CLS_PATIENTS patient = new BL.CLS_PATIENTS();
int patient_exist = patient.VALIDATE_PATIENT_EXIST(Convert.ToInt32(txtPatientNo.Text));
错误出现在第 4 步,如何解决此错误以及我需要在代码中更改的内容。
我需要将 patient_no 分配给 int 变量,然后我需要比较它并验证它是否存在患者,然后显示消息该患者已经存在,如果患者不存在,那么我会将其插入数据库表中。
【问题讨论】:
-
错误的哪一部分你不明白?
-
VALIDATE_PATIENT_EXISTreturns aDataTable而您正尝试将其转换为int。例如,您必须使用dt.AsEnumerable().First().Field<int>("ColumnName")选择要从中提取数据的行和列。 -
这一行出现的错误 int patient_exist = patient.VALIDATE_PATIENT_EXIST(Convert.ToInt32(txtPatientNo.Text));无法隐式转换类型 System.Data.DataTable 为 int ,如何解决这个错误并将返回值赋给变量?
标签: c#