2010-02-28 5 views
0

Je suis confronté à un problème pendant que j'insère un nouvel enregistrement de la partie GUI dans la table de base de données. J'ai créé la table de base de données Patient avec l'identification, le nom, l'âge etc .... l'id est la clé primaire d'identité. Mon problème est pendant que j'insère le nom dupliqué dans la table le contrôle devrait aller à la partie d'autre, et montre le message comme ... Ce nom est déjà sorti, pls essaye avec un autre nom ... mais dans mon codage n'obtenant pas .. ... Voici tout le code ... pls quelqu'un me signaler ce qui est mal ou comment faire cela ??? GUILayer:Problème lors de l'insertion de données de la couche GUI dans la base de données

protected void BtnSubmit_Click(object sender, EventArgs e) 
{ 
     if (!Page.IsValid) 
     return; 
     int intResult = 0; 
     string name = TxtName.Text.Trim(); 
     int age = Convert.ToInt32(TxtAge.Text); 
     string gender; 
     if (RadioButtonMale.Checked) 
     { 
      gender = RadioButtonMale.Text; 
     } 
     else 
     { 
      gender = RadioButtonFemale.Text; 
     } 
     string city = DropDownListCity.SelectedItem.Value; 

     string typeofdisease = ""; 
     foreach (ListItem li in CheckBoxListDisease.Items) 
     { 
      if (li.Selected) 
      { 
       typeofdisease += li.Value; 
      } 
     } 
     typeofdisease = typeofdisease.TrimEnd(); 
     PatientBAL PB = new PatientBAL(); 
     PatientProperty obj = new PatientProperty(); 
     obj.Name = name; 
     obj.Age = age; 
     obj.Gender = gender; 
     obj.City = city; 
     obj.TypeOFDisease = typeofdisease; 
     try 
     { 
      intResult = PB.ADDPatient(obj); 
      if (intResult > 0) 
      { 
       lblMessage.Text = "New record inserted successfully."; 
       TxtName.Text = string.Empty; 
       TxtAge.Text = string.Empty; 
       RadioButtonMale.Enabled = false; 
       RadioButtonFemale.Enabled = false; 
       DropDownListCity.SelectedIndex = 0; 
       CheckBoxListDisease.SelectedIndex = 0;      
      } 
      else 
      { 
       lblMessage.Text = "Name [<b>" + TxtName.Text + "</b>] alredy exists, try another name"; 


      }     
     } 
     catch (Exception ex) 
     { 
      lblMessage.Text = ex.Message.ToString(); 
     } 
     finally 
     { 
      obj = null; 
      PB = null; 
     }   

} 

couche BAL:

public class PatientBAL 
{ 
public int ADDPatient(PatientProperty obj) 
{ 
    PatientDAL pdl = new PatientDAL(); 
    try 
    { 
     return pdl.InsertData(obj); 
    } 
    catch 
    { 
     throw; 
    } 
    finally 
    { 
     pdl=null; 
    } 
} 

}

couche DAL:

public class PatientDAL 
{ 
public string ConString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;  
public int InsertData(PatientProperty obj) 
{ 
    SqlConnection con = new SqlConnection(ConString); 
    con.Open(); 
    SqlCommand com = new SqlCommand("LoadData",con); 
    com.CommandType = CommandType.StoredProcedure; 

    try 
    { 
     com.Parameters.AddWithValue("@Name", obj.Name); 
     com.Parameters.AddWithValue("@Age",obj.Age); 
     com.Parameters.AddWithValue("@Gender",obj.Gender); 
     com.Parameters.AddWithValue("@City", obj.City); 
     com.Parameters.AddWithValue("@TypeOfDisease", obj.TypeOFDisease); 
     return com.ExecuteNonQuery(); 
    } 
    catch 
    { 
     throw; 
    } 
    finally 
    { 
     com.Dispose(); 
     con.Close(); 
    }   
} 

}

Classe de bien:

public class PatientProperty 
{ 
private string name; 
private int age; 
private string gender; 
private string city; 
private string typedisease; 

public string Name 
{ 
    get 
    { 
     return name; 
    } 
    set 
    { 
     name = value; 
    } 
} 
public int Age 
{ 
    get 
    { 
     return age; 
    } 
    set 
    { 
     age = value; 
    } 
} 
public string Gender 
{ 
    get 
    { 
     return gender; 
    } 
    set 
    { 
     gender = value; 
    } 
} 
public string City 
{ 
    get 
    { 
     return city; 
    } 
    set 
    { 
     city = value; 
    } 
} 
public string TypeOFDisease 
{ 
    get 
    { 
     return typedisease; 
    } 
    set 
    { 
     typedisease = value; 
    } 
} 

}

Ceci est ma procédure stockée: CREATE PROCEDURE LoadData ( @Name varchar (50), @Age int, @Gender char (10), @city char (10), @TypeofDisease varchar (50) ) comme insertion dans le patient (nom, âge, sexe, ville, valeurs TypeOfDisease) (@ Nom, @ âge, @Gender, @city, @TypeofDisease) GO

+0

Vous devez reformater le code dans la dernière liste. Et vous n'avez pas fourni la requête de base de données. Comme je peux le voir, vous avez besoin d'une valeur négative retournée pour afficher un avertissement "nom existe". – Kerido

+0

Pouvez-vous partager avec nous la création de tables SQL SP? Ou au moins sa structure. –

Répondre

0

Etes-vous sûr que votre proc LoadData stocké fait un insert au lieu d'une mise à jour?

+0

Salut Voici ma procédure stockée: CREATE PROCEDURE LoadData ( @Name varchar (50), @Age int, @Gender char (10), @city char (10), @TypeofDisease varchar (50) ) comme insertion dans le patient (nom, âge, sexe, ville, valeurs TypeOfDisease) (@ Nom, @ âge, @Gender, @city, @TypeofDisease) GO – Rahul

+0

Rahul ajoutez le code ci-dessus à votre question principale à l'aide du éditer l'option de question. –

0

ressemble à votre jetant l'erreur, de sorte qu'il saute à votre bloc catch.

Vous devrez gérer l'erreur en revenant de PB.ADDPatient et non la valeur

0

L'enregistrement dupliqué dans la base de données? Je crains que vous n'avez pas ajouté la contrainte unique pour les noms dans la base de données!

Si tel est le cas, et que vous utilisez SQL Server, vérifiez ceci: SQL Server 2005 How Create a Unique Constraint?

Questions connexes