我正在将患者详细信息插入数据库。但是当我提交详细信息时出现此错误“不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询。” 这是我的所有编码: PatientProperty.cs
public class PatientProperty
{
private string Pdisease;
private string Pname;
private string Pcategory;
private string Paddr;
private DateTime Dateofjoining;
private int Page;
public PatientProperty(string PDisease, string PName, string PCategory, string PAddr, DateTime DateOfJoining, int PAge)
{
this.Pdisease = PDisease;
this.Pname = PName;
this.Pcategory = PCategory;
this.Paddr = PAddr;
this.Dateofjoining = DateOfJoining;
this.Page = PAge;
}
public string PDISEASE
{
get
{
return Pdisease;
}
set
{
Pdisease=value;
}
}
public string PNAME
{
get
{
return Pname;
}
set
{
Pname = value;
}
}
public string PCATEGORY
{
get
{
return Pcategory;
}
set
{
Pcategory = value;
}
}
public string PADDRESS
{
get
{
return Paddr;
}
set
{
Paddr = value;
}
}
public DateTime DATEOFJOINING
{
get
{
return Dateofjoining;
}
set
{
Dateofjoining = value;
}
}
public int PAGE
{
get
{
return Page;
}
set
{
Page = value;
}
}
}
PatientRegistration.cs
public class PatientRegistration
{
string str = ConfigurationManager.ConnectionStrings["HealthCare"].ConnectionString.ToString();
public void InsertPatient(PatientProperty obj)
{
using (var con = new SqlConnection(str))
{
using (var com = new SqlCommand("PatientRegister", con))
{
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("Pdisease", obj.PDISEASE);
com.Parameters.AddWithValue("Pname", obj.PNAME);
com.Parameters.AddWithValue("Pcategory", obj.PCATEGORY);
com.Parameters.AddWithValue("Paddr", obj.PADDRESS);
com.Parameters.AddWithValue("Dateofjoining", obj.DATEOFJOINING);
com.Parameters.AddWithValue("Page", obj.PAGE);
con.Open();
com.ExecuteNonQuery();
con.Close();
}
}
}
}
PatientRegistrationBussiness.cs
public class PatientRegistrationBussiness
{
public void AddPatient(PatientProperty obj)
{
PatientRegistration PR = new PatientRegistration();
PR.InsertPatient(obj);
}
}
protected void Button1_Click(object sender, System.EventArgs e)
{
//int id = Convert.ToInt32(TextBox1.Text);
string name = TextBox2.Text;
string address = TextBox3.Text;
string category = RadioButtonList1.Text;
int age =Convert.ToInt32(TextBox4.Text);
string disease = TextBox5.Text;
DateTime date =Convert.ToDateTime(TextBox6.Text);
try
{
PatientRegistrationBussiness obj = new PatientRegistrationBussiness();
PatientProperty PP = new PatientProperty(disease, name, category, address, date, age);
obj.AddPatient(PP);
Response.Write("Patient details have been successfully added");
TextBox2.Text = string.Empty;
TextBox3.Text = string.Empty;
TextBox4.Text = string.Empty;
TextBox5.Text = string.Empty;
TextBox6.Text = string.Empty;
RadioButtonList1.SelectedIndex = 0;
}
catch (Exception ex)
{
ex.Message.ToString();
}
finally
{
obj = null;
}
}
在作为DateTime的数据库日期字段中。 请有人修改它。
谢谢, 萨米特
答案 0 :(得分:1)
看起来你的数据库期待一个int,但你提供的是DateTime。你为什么这样做?
最简单的事情是,假设您正在开发此应用程序,那就是在数据库中使用Date数据类型。
根据您的需要和您使用的SQL Server版本,有几种可供选择。请查看此处列出的日期和时间数据类型 - http://msdn.microsoft.com/en-us/library/ms187752.aspx。
如果您使用的是SQL Server 2008,则可以考虑使用some of the new Date data types。
答案 1 :(得分:0)
正如Richard指出的那样,可能是因为日期字段列在表中被定义为int。在你的问题中,你提到它正确定义为DateTime。
我想那时问题出现在存储过程中,它试图将Date分配给某个int变量或类似的东西。
答案 2 :(得分:0)
我同意Richard和Brushn的观点。 另外,为了防止出现这种错误,我认为最好使用Add of SqlCommand.Parameters方法来设置参数的相应DbType值,例如:
SqlParameter param = com.Parameters.Add("@Dateofjoining", SqlDbType.DateTime);
param.Value = obj.DATEOFJOINING;
对于每个命令参数,等等。