ExecuteNonQuery: la propriété Connection n'a pas été initialisée.
Après-midi,
Donc, j'ai été à cette question pendant des heures et ne peut pas vraiment sortir de cette dernière bosse. Ci-dessous est le code de ce programme que j'ai écris:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace Test
{
class Program
{
static void Main()
{
EventLog alog = new EventLog();
alog.Log = "Application";
alog.MachineName = ".";
foreach (EventLogEntry entry in alog.Entries)
{
SqlConnection connection1 = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True");
SqlDataAdapter cmd = new SqlDataAdapter();
cmd.InsertCommand = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ");
cmd.InsertCommand.Parameters.Add("@EventLog",SqlDbType.VarChar).Value = alog.Log;
cmd.InsertCommand.Parameters.Add("@TimeGenerated", SqlDbType.DateTime).Value = entry.TimeGenerated;
cmd.InsertCommand.Parameters.Add("@EventType", SqlDbType.VarChar).Value = entry.EntryType;
cmd.InsertCommand.Parameters.Add("@SourceName", SqlDbType.VarChar).Value = entry.Source;
cmd.InsertCommand.Parameters.Add("@ComputerName", SqlDbType.VarChar).Value = entry.MachineName;
cmd.InsertCommand.Parameters.Add("@InstanceId", SqlDbType.VarChar).Value = entry.InstanceId;
cmd.InsertCommand.Parameters.Add("@Message", SqlDbType.VarChar).Value = entry.Message;
connection1.Open();
cmd.InsertCommand.ExecuteNonQuery();
connection1.Close();
}
}
}
}
Le Code se compile très bien sans erreur ou d'avertissement, mais quand je vais pour l'exécuter, dès qu'il arrive à cmd.InsertCommand.ExecuteNonQuery(); j'obtiens l'erreur suivante:
ExecuteNonQuery: propriété de la Connexion n'a pas été initialisé.
Toutes les idées sur ce que j'ai raté?
source d'informationauteur jladd
Vous devez vous connecter pour publier un commentaire.
Vous devez affecter la connexion à la
SqlCommand
vous pouvez utiliser le constructeur ou la propriété:Je recommande fortement d'utiliser le
à l'aide de l'instruction
pour n'importe quel type de mise en œuvre deIDisposable
commeSqlConnection
elle va aussi fermer la connexion:En dehors de cela, vous n'avez pas besoin de créer une nouvelle connexion et
DataAdapter
pour chaque entrée dans laforeach
même si la création, l'ouverture et la fermeture d'une connexion ne pas dire que ADO.NET créer, ouvrir et fermer un physique connexion, mais regarde juste dans le connexion-piscine pour qu'une connexion soit disponible. C'est néanmoins une surcharge inutile.Vous n'êtes pas de l'initialisation de la connexion.C'est pourquoi ce type d'erreur est de venir à vous.
Votre code:
Code corrigé:
Quelques choses de mal ici.
Avez-vous vraiment envie d'ouvrir et de fermer la connexion pour chaque entrée de journal?
Ne devriez-vous pas être à l'aide de
SqlCommand
au lieu deSqlDataAdapter
?L'adaptateur de données (ou
SqlCommand
) besoins exactement ce que le message d'erreur vous indique qu'il en manque: une connexion active. Juste parce que vous avez créé un objet de connexion n'a pas la baguette magique pour dire C# qu'il est celui que vous souhaitez utiliser (surtout si vous n'avez pas ouvert la connexion).Je recommande fortement un C# /SQL Server tutoriel.
Fait cette erreur se produit lorsque le serveur de connexion, mais ne peut pas construire en raison de l'échec dans l'identification de connexion identificateur de fonction. Ce problème peut être résolu en tapant fonction de connexion dans le code. Pour cela, je prend un exemple simple. Dans ce cas, la fonction est con votre peut être différent.
D'ouverture et de fermeture de la connexion prend beaucoup de temps. Et utiliser la fonction "aide" comme un autre membre a suggéré.
J'ai changé votre code légèrement, mais mettez-le SQL de création et d'ouverture et de fermeture à l'EXTÉRIEUR de votre boucle. Ce qui devrait accélérer l'exécution un peu.
essaie juste de faire ceci..
vous avez besoin d'ouvrir la connexion à l'aide
connection.open()
sur leSqlCommand.Connection
objet avant l'exécution deExecuteNonQuery()
double-cliquez sur votre formulaire pour créer événement form_load.Puis à l'intérieur de l'événement commande d'écriture.connexion = "votre nom de connexion";