Je suis nouveau en C # et SQL. Maintenant, depuis un formulaire, j'accède à une fonction dans une classe.
Mon code est
public void updateSupplierInformation(string id, string name, string balance, string place, string address, string phone, string bankname, string bankbranch, string accountno)
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlCommand NewCmd = conn.CreateCommand();
NewCmd.Connection = conn;
NewCmd.CommandType = CommandType.Text;
NewCmd.CommandText = " update supplier set " + " ID = " + "'" + id + "'" + " , NAME = " + "'" + name + "'" + " , BALANCE = " + "'" + balance + "'" + " , PLACE = " + "'" + place + "'" + " , LOCATION = " + "'" + address + "'" + ", PHONE = " + "'" + phone + "'" + " , BANK_NAME = " + "'" + bankname + "'" + " , BANK_BRANCH = " + "'" + bankbranch + "'" + ", ACCOUNT_NO = " + "'" + accountno + "'" + " where ID = " + "@id";
NewCmd.Parameters.AddWithValue("@id",id);
NewCmd.ExecuteNonQuery();
conn.Close();
}
Maintenant, si un enregistrement n'existe pas dans la base de données avec la variable id
donnée, l'application s'arrête immédiatement. Comment puis-je gérer cela? Je souhaite afficher un message indiquant que les données saisies sont incorrectes et demander à l'utilisateur de saisir d'autres données.
ExecuteNonQuery () renvoie le nombre de lignes affectées par une instruction INSERT, UPDATE ou DELETE. Si vous devez vérifier l’exception SQL, vous devez inclure une instruction try catch dans votre fonction.
public void updateSupplierInformation(string id, string name, string balance, string place, string address, string phone, string bankname, string bankbranch, string accountno)
{
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlCommand NewCmd = conn.CreateCommand();
NewCmd.Connection = conn;
NewCmd.CommandType = CommandType.Text;
NewCmd.CommandText = " update supplier set " + " ID = " + "'" + id + "'" + " , NAME = " + "'" + name + "'" + " , BALANCE = " + "'" + balance + "'" + " , PLACE = " + "'" + place + "'" + " , LOCATION = " + "'" + address + "'" + ", PHONE = " + "'" + phone + "'" + " , BANK_NAME = " + "'" + bankname + "'" + " , BANK_BRANCH = " + "'" + bankbranch + "'" + ", ACCOUNT_NO = " + "'" + accountno + "'" + " where ID = " + "@id";
NewCmd.Parameters.AddWithValue("@id",id);
int a=NewCmd.ExecuteNonQuery();
conn.Close();
if(a==0)
//Not updated.
else
//Updated.
}
catch(Exception ex)
{
// Not updated
}
}
ExecuteNonQuery
renvoie le nombre de lignes affectées. Si la valeur est 0, cela signifie qu'aucune ligne ne correspond à la mise à jour. Bien sûr, ce n’est que si la mise à jour "fonctionne" en termes de ne pas lancer d’exception ... alors que je soupçonne qu’elle génère une exception dans votre cas, ce qui signifie probablement que n’est pas à faire avec la ligne non. existant dans la base de données. (Il est possible qu'il y ait du code que vous n'avez pas montré qui fait dépend de la ligne existante, remarquez.)
Aditionellement:
using
pour disposer des ressources de manière fiable.using
) une nouvelle connexion chaque fois que vous souhaitez effectuer une opération de base de données, et laissez le pool de connexions gérer l'efficacitéMon suppose (lors d’une inspection occasionnelle), c’est que le problème est que votre instruction de mise à jour tente de mettre à jour l’ID, qui est probablement en lecture seule. Mais vous le saurez lorsque vous corrigez la gestion de vos exceptions.
Je sais qu'il y a déjà une réponse postée mais essayons autre chose:
SqlConnection SQLConn = new SqlConnection("datahere");
SqlCommand SQLComm = new SqlCommand();
SQLcomm.Connection = SQLConn;
SQLConn.Open();
SQLComm.CommandText = "SQL statement goes here"
SqlDataReader dataReader = SQLComm.ExecuteReader();
dataReader.Read();
if(dataReader.HasRows == true){ //if it has rows do code
//do code
}
else{
// do other code
}
HasRows retournera une valeur bool