ExecuteReader: la propriété de connexion n'a pas été initialisée.
mon codage est
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI");
SqlDataReader rdr = null;
try
{
// 2. Open the connection
conn.Open();
// 3. Pass the connection to a command object
//SqlCommand cmd = new SqlCommand("select * from Customers", conn);
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)
values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')");
//
// 4. Use the connection
//
// get query results
rdr = cmd.ExecuteReader();
// print the CustomerID of each record
while (rdr.Read())
{
Console.WriteLine(rdr[0]);
}
}
finally
{
// close the reader
if (rdr != null)
{
rdr.Close();
}
// 5. Close the connection
if (conn != null)
{
conn.Close();
}
}
}
}
}
utilisez-le et passez l'objet de connexion:
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')",conn);
Après SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('....
Ajouter
cmd.Connection = conn;
J'espère que cette aide
vous devez affecter une connexion à votre objet de commande, comme ..
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"')");
cmd.Connection = conn;
Vous pouvez également écrire ceci:
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn);
cmd.Parameters.AddWithValue("@project",name1.SelectedValue);
cmd.Parameters.AddWithValue("@iteration",iteration.SelectedValue);
Toutes les réponses sont vraies, c'est une autre façon. Et j'aime celui-ci
SqlCommand cmd = conn.CreateCommand()
vous devez remarquer que les chaînes concat ont un problème d'injection sql. Utilisez les paramètres http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
Comme mentionné, vous devez attribuer la connexion et vous devez également utiliser de préférence des paramètres sql à la place, de sorte que votre affectation de commande se lirait:
// 3. Pass the connection to a command object
SqlCommand cmd=new SqlCommand ("insert into time(project,iteration) values (@project, @iteration)", conn); // ", conn)" added
cmd.Parameters.Add("project", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue;
cmd.Parameters.Add("iteration", System.Data.SqlDbType.NVarChar).Value = this.name1.SelectedValue;
//
// 4. Use the connection
//
En utilisant des paramètres, vous évitez l'injection SQL et d'autres fautes de frappe problématiques (les noms de projets comme "myproject's" en sont un exemple).
J'aime placer toutes mes connexions sql dans les instructions using
. Je pense qu'ils ont l'air plus propres, et ils se nettoient après avoir fini avec eux. Je recommande également de paramétrer chaque requête, non seulement elle est beaucoup plus sûre, mais elle est plus facile à maintenir si vous devez revenir et apporter des modifications.
// create/open connection
using (SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=rags;Integrated Security=SSPI")
{
try
{
conn.Open();
// initialize command
using (SqlCommand cmd = conn.CreateCommand())
{
// generate query with parameters
with cmd
{
.CommandType = CommandType.Text;
.CommandText = "insert into time(project,iteration) values(@name, @iteration)";
.Parameters.Add(new SqlParameter("@name", this.name1.SelectedValue));
.Parameters.Add(new SqlParameter("@iteration", this.iteration.SelectedValue));
.ExecuteNonQuery();
}
}
}
catch (Exception)
{
//throw;
}
finally
{
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close;
}
}
}