插入日期数据时出错

时间:2009-07-15 07:33:21

标签: sql-server

我正在将患者详细信息插入数据库。但是当我提交详细信息时出现此错误“不允许从数据类型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的数据库日期字段中。 请有人修改它。

谢谢, 萨米特

3 个答案:

答案 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;
对于每个命令参数,

等等。