C# Database di Inserire (ASP.NET) – ExecuteNonQuery: proprietà CommandText non è stato inizializzato

prima volta sto facendo un inserto ASP.NET/C# e sto avendo un piccolo problema. Io continuo a ricevere il seguente errore ogni volta che viene eseguito questo codice: “ExecuteNonQuery: proprietà CommandText non è stato inizializzato” qualcuno sa cosa significa e come risolvere il problema?

Grazie in anticipo!

string sqlQuery = "INSERT INTO ATI_LOG_IO (Date, Connect_Time, Disconnect_Time, ATI_Rep, Reason_For_Access, Property_Contact, Case_Number, Comments, Property_ID)";
sqlQuery += "VALUES (@Today, @Connect, @Disconnect, @Rep, @Reason, @Contact, @CaseNum, @Comments, @PropertyID)";
using (SqlConnection dataConnection = new SqlConnection(connectionString))
{
    using (SqlCommand dataCommand = dataConnection.CreateCommand())
    {
        dataConnection.Open();
        dataCommand.CommandType = CommandType.Text;
        dataCommand.CommandText = sqlQuery;
        dataCommand.Parameters.Add("@Today", DateTime.Today.ToString());
        dataCommand.Parameters.Add("@Connect", txtInDate.Text + " " + fromHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.Add("@Disconnect", txtOutdate.Text + " " + toHrs.Text + ":" + fromMins.Text + ":00");
        dataCommand.Parameters.Add("@Rep", repID);
        dataCommand.Parameters.Add("@Reason", txtReason.Text);
        dataCommand.Parameters.Add("@Contact", txtContact.Text);
        dataCommand.Parameters.Add("@CaseNum", txtCaseNum.Text);
        dataCommand.Parameters.Add("@Comments", txtComments.Text);
        dataCommand.Parameters.Add("@PropertyID", lstProperties.SelectedValue);
        dataCommand.ExecuteNonQuery();
        dataConnection.Close();
    }
}
InformationsquelleAutor David Perry | 2011-04-30



3 Replies
  1. 6
    string sqlQuery = "INSERT INTO ATI_LOG_IO (Date, Connect_Time, Disconnect_Time, ATI_Rep, Reason_For_Access, Property_Contact, Case_Number, Comments, Property_ID)";
    sqlQuery += " VALUES (@Today, @Connect, @Disconnect, @Rep, @Reason, @Contact, @CaseNum, @Comments, @PropertyID)";
    using (SqlConnection dataConnection = new SqlConnection(connectionString))
    {
        using (SqlCommand dataCommand = new SqlCommand(sqlQuery, dataConnection))
        {
            dataCommand.Parameters.AddWithValue("Today", DateTime.Today.ToString());
            dataCommand.Parameters.AddWithValue("Connect", txtInDate.Text + " " + fromHrs.Text + ":" + fromMins.Text + ":00");
            dataCommand.Parameters.AddWithValue("Disconnect", txtOutdate.Text + " " + toHrs.Text + ":" + fromMins.Text + ":00");
            dataCommand.Parameters.AddWithValue("Rep", repID);
            dataCommand.Parameters.AddWithValue("Reason", txtReason.Text);
            dataCommand.Parameters.AddWithValue("Contact", txtContact.Text);
            dataCommand.Parameters.AddWithValue("CaseNum", txtCaseNum.Text);
            dataCommand.Parameters.AddWithValue("Comments", txtComments.Text);
            dataCommand.Parameters.AddWithValue("PropertyID", lstProperties.SelectedValue);
    
            dataConnection.Open();
            dataCommand.ExecuteNonQuery();
            dataConnection.Close();
        }
    }

    Copia-incolla dovrebbe fare il trucco

    • In modo da guardare hai risolto il mio codice con i suggerimenti sopra riportati, che ho molto da ottenere, ma (scusate se è una domanda niubba) qual è la differenza tra i Parametri.Aggiungere e Parametri.AddWithValue – e è l’omissione del mio originale @, di conseguenza di preferenza o ero in errore usare loro, in primo luogo?
    • Io ho usato solo i Parametri.Aggiungere(SqlParameter) overload del metodo passando in preinstantiated parametro. Il sovraccarico si utilizza attualmente obsoleti da Microsoft. Non ho mai avuto successo con esso, in passato. Come lontano come il [email protected], in VB ho dovuto specificare il nome del parametro con il [email protected], quando si utilizza AddWithValue metodo, ma in C# non e ‘richiesto, ma penso che si potrebbe ancora ottenere lo stesso risultato utilizzando il segno” @ ” con il nome del parametro. Se si preferisce utilizzare i Parametri.Aggiungi Parametri di utilizzo.Add(String Nome, SqlDbType Tipo) sovraccarico e quindi passare come Parametri[“@Nome”].Valore=Valore
    • Che sembra aver preso cura di esso. Ora ho un errore nel non avere le autorizzazioni INSERT sulla tabella, che è un mio stupido errore e almeno so come risolvere uno 🙂
  2. 1

    Questo di solito significa che non hai impostato la proprietà CommandText, ma nel tuo caso, hai.

    Si dovrebbe provare che il sqlQuery stringa in realtà non è vuoto di questa linea:

    dataCommand.CommandText = sqlQuery;

    P. S. Come “best practice”, si potrebbe voler prendere in considerazione l’apertura della connessione, DOPO aver impostato l’oggetto SqlCommand, per ridurre al minimo il tempo trascorso con una connessione aperta:

        dataCommand.CommandType = CommandType.Text;
        dataCommand.CommandText = sqlQuery;
        dataCommand.Parameters.Add("@Today", DateTime.Today.ToString());
        //...
        dataConnection.Open();
        dataCommand.ExecuteNonQuery();
        dataConnection.Close();
    • Ho tentato di aprire prima e dopo aver impostato l’oggetto solo nel caso in cui avesse qualcosa a che fare con l’errore, si è dimenticato di spostare indietro prima di postare il codice. Grazie per il consiglio, però 🙂
  3. 1

    Guardando la tua stringa sql della query, non stai lasciando uno spazio tra “IN” e “VALORI” parte.

    ...............Property_ID)";
    sqlQuery += "VALUES (@Today, ..............

    DOVREBBE ESSERE:

    ...............Property_ID)";
    sqlQuery += " VALUES (@Today, ..............
    • Oh caro, che sarebbe certamente causare alcuni problemi. Qualsiasi idea se sarebbe la causa di questo problema specifico? Il dataCommand effettivamente analizzare l’SQL prima di inviarlo o sarebbe solo risultato a un errore SQL essere restituito una volta che posso risolvere la causa del questo errore?

Lascia un commento