C# Base de données de La propriété ConnectionString n'a pas été initialisé
J'essaie d'insérer des valeurs dans ma base de données et chaque fois que j'essaie de l'ajouter, mon programme crash, ce qui me donne une erreur que La propriété ConnectionString n'a pas été initialisé, mais j'ai bien l'initialiser. Voici mon code:
private static string conStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\aldrin\documents\visual studio 2013\Projects\MidtermAssignment_Ramirez\MidtermAssignment_Ramirez\MasterFile.mdf;Integrated Security=True";
SqlConnection myCon = new SqlConnection();
private int studId, year, units;
private string fName, lName, mName, course, payment;
public void insertRecord()
{
myCon.Open();
SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon);
insertInfo.CommandType = CommandType.StoredProcedure;
insertInfo.Parameters.Add("@studId", SqlDbType.Int).Value = studId;
insertInfo.Parameters.Add("@fName", SqlDbType.VarChar).Value = fName;
insertInfo.Parameters.Add("@lName", SqlDbType.VarChar).Value = lName;
insertInfo.Parameters.Add("@mName", SqlDbType.VarChar).Value = mName;
insertInfo.ExecuteNonQuery();
myCon.Close();
myCon.Open();
SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon);
insertData.CommandType = CommandType.StoredProcedure;
insertData.Parameters.Add("@studId", SqlDbType.Int).Value = studId;
insertData.Parameters.Add("@course", SqlDbType.VarChar).Value = course;
insertData.Parameters.Add("@year", SqlDbType.Int).Value = year;
insertData.Parameters.Add("@units", SqlDbType.Int).Value = units;
insertData.Parameters.Add("@payment", SqlDbType.VarChar).Value = payment;
insertData.ExecuteNonQuery();
myCon.Close();
}
Voici le code de mon bouton:
myData.StudId = Convert.ToInt32(txtStudId.Text);
myData.FName = txtFName.Text;
myData.LName = txtLName.Text;
myData.MName = txtMName.Text;
myData.Course = cboCourse.SelectedItem.ToString();
myData.Year = Convert.ToInt32(cboYear.SelectedItem.ToString());
myData.Units = Convert.ToInt32(txtUnits.Text);
myData.Payment = cboPayment.SelectedItem.ToString();
myData.insertRecord();
et voici mes procédures stockées:
CREATE PROCEDURE [dbo].spInsertStudentData
@studId int,
@course varchar(50),
@year int,
@units int,
@payment varchar(50)
AS
INSERT INTO StudentData VALUES (@studId, @course, @year, @units, @payment)
RETURN 0
CREATE PROCEDURE [dbo].spInsertStudentInformation
@studId int,
@fName varchar(50),
@lName varchar(50),
@mName varchar(50)
AS
INSERT INTO StudentInformation VALUES (@studId, @fName, @lName, @mName)
RETURN 0
Je suis étudiant les bases de données récemment dans ASP.NET et c'est ce que je fais, mais je ne sais pas pourquoi ce n'est pas en cours d'exécution fine en C#.
Ne gardez pas de variable globale pour une connexion. Déclarer la variable localement à l'intérieur d'une instruction d'utilisation pour être sûr qu'il sera fermé et éliminés dans le cas d'exceptions.
place de la chaîne de connexion dans le fichier de config
place de la chaîne de connexion dans le fichier de config
OriginalL'auteur Aldrin Ramirez | 2015-02-08
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur est clair. Un objet SqlConnection besoin d'un connectionstring avant d'essayer d'ouvrir la connexion. Donc, lorsque vous créez la connexion que vous passez la connectionstring ou définir la propriété ConnectionString avant l'ouverture.
Mais vraiment, je vous suggère de commencer à utiliser la connexion locale des variables au lieu de celles du monde entier. Et garder cette déclaration de l'intérieur à l'aide d'instruction
De l'occurrence de SqlConnection utilise le Le Regroupement De Connexion de l'infrastructure et donc c'est mieux d'avoir des variables locales qui peuvent être recyclés par le pool de connexion sans garder une ressource importante verrouillé pour votre programme
Enfin la instruction d'utilisation evite les fuites de mémoire de la fermeture et de la disposition des objets jetables, comme la liaison et de la commande dans le cas d'exceptions
Il y a un autre point à noter dans votre code. Vous exécutez les deux commandes. Je suis sûr que vous ne voulez pas insérer l'étudiant info si, pour une raison quelconque, vous n'êtes pas en mesure d'insérer les données sur les étudiants. Ces scénarios appel pour l'ouverture d'une SqlTransaction qui conserve vos données atomique (ce qui signifie que vous ne voulez pas changer quoi que ce soit dans la base de données si tout les opérations échouent)
Le dernier Commit va persister tout dans la base de données alors que, sortant de l'utilisation de bloc sans appel de la Commettre, automatiquement la Restauration de toutes les modifications apportées à vos tables
OriginalL'auteur Steve
Vous devez fournir la chaîne de connexion que vous avez créé dans votre première ligne de votre connexion constructeur:
OriginalL'auteur rory.ap
Message d'erreur est si claire;
Vous pouvez définir c'est
ConnectionString
de la propriété àconStr
comme;ou vous pouvez le spécifier sur constructeur comme un paramètre;
Que Steve a dit, l'enregistrement de votre
SqlConnection
comme une variable globale n'est pas une bonne idée. Utiliser des variables locales et l'utilisationà l'aide de
déclaration de disposer de vos connexions et commandes.OriginalL'auteur Soner Gönül