2009-07-15 21 views
0

患者の詳細をデータベースに挿入しています。このエラーを取得する詳細を提出するとき "データ型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; 
      }  
} 

: はここに私のすべての符号化です。 Pls誰かがそれを変更します。

おかげで、 スミット

+0

PatientRegisterストア・プロシージャのパラメータ・タイプ・フィールドを確認します。 –

答えて

1

は、データベースがintを期待していますが、日時を提供しているように見えます。どうしてそんなことをするのか?

このアプリケーションを開発していると仮定すると、最も簡単なことは、DBに日付データ型を使用することです。

必要と使用しているSQL Serverのバージョンに応じて、いくつか選択できます。ここに記載されている日付と時刻のデータ型をご覧ください。http://msdn.microsoft.com/en-us/library/ms187752.aspx

SQL Server 2008を使用している場合は、some of the new Date data typesを使用することを検討してください。

0

リチャードは、日付フィールドの列がテーブルのintとして定義されている可能性があると指摘していました。あなたの質問では、DateTimeとして正しく定義されていることに言及します。

私は問題がストアドプロシージャで、Dateをある種の変数などに代入しようとしていると思います。

0

私はRichardとBrushnに同意しました。 はまた、このようなエラーを防ぐために、私は例えば、パラメータの設定に対応するDbTypeの値をimpicitするSqlCommand.Parametersの追加メソッドを使用することをお勧めだと思います:

  SqlParameter param = com.Parameters.Add("@Dateofjoining", SqlDbType.DateTime); 
      param.Value = obj.DATEOFJOINING; 

というように、コマンドの各パラメータのために。

関連する問題