Utilizzando una Stored Procedure di SQL Server in Visual Studio

La mia Esperienza & Quello che sto Usando

Sto quindi iniziando con un applicazione web di base in ASP.NET per guadagnare un po ‘ di più familiarità con SQL Server Management Studi e Visual Studios 2010. Normalmente, io uso MySQL, PHP e Sublime Editor di Testo 2. Non sono molto esperto con C# e l’implementazione di un database in Visual Studio. Così sto cercando di utilizzare una stored procedure in SQL Server Management Studi e implementare in Visual Studios 2010.

Il Problema

Quindi, ecco il mio problema: sto cercando di creare una pagina web di base che si collega a un database di SQL Server e di essere in grado di aggiungere, eliminare, la ricerca e la visualizzazione di tutti i record dal database. Ora ho scritto il mio codice basato su quello che ho pensato è stata corretta per aggiungere/eliminare e non succede nulla quando clicco i tasti. Così sono sicuro che si può vedere dove la mia frustrazione deriva dal. Non sono sicuro se il problema è nel mio C# codificazione o nel mio SQL codifica.

Mi piacerebbe mettere a fuoco solo per i miei aggiungere/eliminare i pulsanti a lavorare e quindi a capire la logica per visualizzare tutti i file. Mi piacerebbe essere in grado di fare clic su un pulsante e quindi di mostrare tutti i file invece di visualizzare una griglia. Il mio database è denominato FirstApp.

Ecco cosa c’è nel mio web.file di configurazione:

<add name="FirstApp" connectionString="Data Source=PCNAME\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True"
  providerName="System.Data.SqlClient" />

Ora, questo è ciò che è in mio di Default.aspx.cs file:

*CODICE CORRETTO ORA!*

  namespace FirstApp
  {
  public partial class _Default : System.Web.UI.Page
  {
  public string CommandArgument { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private void MessageBox(string msg)
    {
        Label lbl = new Label();
        lbl.Text = "<script language='javascript'>" + Environment.NewLine +  "window.alert('" + msg + "')</script>";
        Page.Controls.Add(lbl);
    }

    //Add a new company to the database
    protected void add_Click(object sender, EventArgs e)
    {
        SqlDataReader rdr = null;
        string connectionString = null;
        SqlConnection cnn;
        connectionString = "Data Source=ITXDK29M91\\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True";
        cnn = new SqlConnection(connectionString);
        try
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("dbo.Add_Company", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@companyname", companyname.Text);
            cmd.Parameters.AddWithValue("@companyphone", companyphone.Text);
            cmd.Parameters.AddWithValue("@companyid", companyid.Text);
            cmd.Parameters.AddWithValue("@companytype", companytype.Text);
            rdr = cmd.ExecuteReader();
         }
        finally
        {

            //Close the connections 
            if (cnn != null)
            {
                cnn.Close();
            }
            if (rdr != null)
            {
                rdr.Close();
            }
        }
     }

     //Delete a company from the database
     protected void delete_Click(object sender, EventArgs e)
     {
         SqlDataReader rdr = null;
        SqlConnection cnn;
        string connectionString = null;
        connectionString = "Data Source=ITXDK29M91\\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True";
        cnn = new SqlConnection(connectionString);
        try
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("dbo.deleteCo", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@ID", SqlDbType.Int);
            rdr = cmd.ExecuteReader();

        }

        finally
        {

            //Close the connections 
            if (cnn != null)
            {
                cnn.Close();
            }
            if (rdr != null)
            {
                rdr.Close();
            }
        }
    }


    protected void Search_Click(object sender, EventArgs e)
    {

    }

    protected void Getall_Click(object sender, EventArgs e)
    {

    }

  }
  }

Questo è ciò che è in mio Codice Sorgente in Default.aspx

 <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">      <h2>Ready for an Adventure? Let&#39;s get started! 
     </h2> <hr />This is where you can enter information about your company. 
 <br />
 <form method="post" action="">
Company Name:<br /> 
<asp:TextBox ID="companyname" runat="server"></asp:TextBox>
<br />
Company Phone Number:<br />
<asp:TextBox ID="companyphone" runat="server"></asp:TextBox>
<br />
Company Tax ID Number:
<br />
<asp:TextBox ID="companyid" runat="server"></asp:TextBox>
<br />
Type of business: <br />
     <asp:TextBox ID="companytype" runat="server"></asp:TextBox>
<br />
 <asp:Button ID="add" runat="server" BackColor="DeepSkyBlue" 
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
onclick="add_Click" Text="Submit" Width="128px" />
</form> <hr /> 
Want to delete your company information?<br />
Enter in the Company ID Number:&nbsp;
<br />
 <asp:TextBox ID="PrimaryKey" runat="server" Width="120px"></asp:TextBox>
 <br />
 <asp:Button ID="delete" runat="server" BackColor="DeepSkyBlue" 
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
onclick="delete_Click" Text="Delete Info" Width="119px" />
<br />
<hr /> 
Looking for similar companies?
<br />
(Ex: Retail, Designer, Restaurant, etc.) &nbsp;
<br />
Enter the type of company:
 <br />
 <asp:TextBox ID="scompanyid" runat="server" Width="120px"></asp:TextBox>
 <br />
 <asp:Button ID="Search" runat="server" BackColor="DeepSkyBlue" 
 BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
 CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
 onclick="Search_Click" Text="Start Searching!" Width="119px" />
 <br />
 <hr /> 
   Want to see all the companies that we work with? <br /> 
   Click the button below! 
 <br />
 <asp:Button ID="Getall" runat="server" BackColor="DeepSkyBlue" 
 BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
 CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
 onclick="Getall_Click" Text="Get all records!" Width="119px" />
 <br />
   <br />
   </asp:Content>

AGGIORNAMENTO: ho aggiornato il codice per visualizzare il codice corretto. Il pulsante aggiungi funziona, ma il mio pulsante elimina non è. Sto ancora cercando di capire che uno.

  • Non sembrano avere tutte le connessioni. Ogni esempio ha connessioni. Perché non si utilizzano le connessioni?
  • Avete preso in considerazione l’utilizzo di alcune delle più comodo costrutti ASP.NET come un SQLDataSource o ObjectDataSource componente?
  • Oh, e che cosa Hogan, ha detto. Sei il recupero di una stringa di connessione, ma tu non la creazione e l’utilizzo di una connessione con esso.
  • Inoltre, quando si lavora con parametri, assicurati di essere coerenti e utilizzare la “@nomeparametro”.
  • Non ha un oggetto di connessione, come li chiama lui aperto su di esso?
  • Oops, hai ragione. L’eliminazione di quel commento.
  • Ok – ho aggiunto una connessione e ancora non sembra funzionare. Mi manca qualcosa nella stringa di connessione?…
  • “FirstApp” è un valore di stringa, non un riferimento all’elemento di configurazione. È necessario per ottenere il valore tramite il gestore di configurazione. Vedi: stackoverflow.com/questions/6536715/…
  • per curiosità, quali esempi da guardare per ottenere il tuo codice? Come la gente ha detto, non sei l’apertura di una connessione, o l’esecuzione della query. Anche io uso il tuo modo, ma c’è .NET oggetto specificamente su misura per il DML di SQL, msdn.microsoft.com/en-us/library/…
  • Finalmente ho la connessione a lavorare. Ho usato diversi esempi e alcuni di loro avevano modi diversi di connessione. VS conservati mi dà errori dicendo che non c’era nessuna variabile chiamata “open” ecco perché ho preso la dichiarazione e, pensando che fosse sbagliato. Tuttavia, ho avuto tutto, fino e in esecuzione. Appena non può ottenere il pulsante elimina per lavoro. Grazie per l’aiuto di tutti!

InformationsquelleAutor Closet Techy | 2013-03-06



3 Replies
  1. 6

    Non siete in realtà l’apertura di una connessione o l’esecuzione di comandi SQL. In generale, il modo in cui eseguire un semplice comando è:

    using (var conn = new SqlConnection(connectionString))
    {
        using (var comm = conn.CreateCommand())
        {
            conn.Open();
            comm.CommandText = "SOME SQL HERE";
    
            //command type, parameters, etc.
    
            //pick one of the following
            comm.ExecuteNonQuery();
            int value = (int)comm.ExecuteScalar();
            SqlDataReader reader = comm.ExecuteReader();
    
        }
    }
    • AH! Qualcuno utilizzando una connessione, mi sento meglio ora.
    • Grazie per la modifica.
    • Ma io non sto cercando di eseguire un comando SQL all’interno di VS. Sto cercando di utilizzare una stored procedure in SQL Server Management studio. Così come io uso ancora il “conn.open();” e quindi implementare la mia stored procedure?… Che è quello che sto cercando di fare. Io non so come fare. >.<
    • Una stored proc non è diverso da qualsiasi altra istruzione SQL – è ancora creare un comando e lo esegue. L’unica differenza è la vostra CommandText è la stored proc nome, e si imposta il CommandType essere StoredProcedure. Oltre a questo, è possibile eseguire lo stesso come si farebbe con qualsiasi altra istruzione SQL.
    • Ahhh! Che rende molto più senso. Grazie! Voglio andare a provare che poi!
  2. 4

    È necessario eseguire il comando. Ci sono quattro tipi di esecuzione (a seconda del tipo di risultati che si ‘ ll essere in attesa dalla query di istruzione)

    • ExecuteReader – di Righe e colonne restituite (ad esempio, il Normale query di selezione)
    • ExecuteNonquery – No risultati attesi. (ad esempio l’Eliminazione di un record)
    • ExecuteScalar – Singolo valore (ad esempio, Count, Max, ecc..)
    • ExecuteXMLReader – Per roba di XML

    Qualcosa di simile a questo per aggiungere

    cmd.ExecuteNonquery();

    Anche prima di preoccuparsi di eseguire il comando, però, è sempre bisogno di una connessione aperta attraverso la quale è possibile eseguire i comandi e avete bisogno di collegare il tuo comando è:

    SqlConnection cn = new SqlConnection(connStr);
    cn.Command = cmd;
    cn.Open();
    <your command/parameter code here>
    cmd.ExecuteNonquery();

    E non dimenticate di mettere la roba indietro il modo in cui l’hai trovato:

    cmd.Close();
    cn.Close();

    Ci sono altri suggerimenti che mi piacerebbe fare, come fare il numero di telefono varchar poiché non si sta andando a eseguire operazioni aritmetiche su di esso come un numero, ma questo non è il vero problema qui e ora.

    Migliori auguri!!!

    FYI: Lato argomento: ogni volta che si inizia a utilizzare i comandi per la restituzione dei risultati, non avrete bisogno di una “nuova” per il tuo SqlDataReaders perché i comandi eseguiti con ExecuteReader creare e restituire un oggetto SqlDataReader. Questo significa che si può solo fare questo

    //This next line not needed
    //dr = new SqlDataReader()   
    SqlDataReader dr = cmd.ExecuteReader();
    • Grazie per il vostro aiuto! Questo è stato sicuramente utile, quando fissare il mio codice! Io lo apprezzo!
  3. 0

    Sembra che non sono l’esecuzione di istruzioni SQL. Provare a creare un metodo che fa il seguito quindi chiamare il metodo dal tuo elimina evento click del pulsante.

        public static void DeleteSomething()
        {
            using (var conn = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand("usp_proc_delete", conn.CreateCommand()))
                {
                     conn.Open()
                     cmd.CommandType = CommandType.StoredProcedure;
                     cmd.Parameters.AddWithValue("@PrimaryKey", SqlDbType.Int);
                     cmd.ExecuteNonQuery();
                }
            }
        }
    • Io in realtà penso che questo è una buona idea, ma non mi sembra di voler lavorare per me. La linea: “utilizzando (SqlCommand cmd = new SqlCommand(“usp_proc_delete”, conn.CreateCommand()))” è il lancio di due diversi errori. 1) Il miglior metodo di overload partita per il ‘Sistema.Dati.SqlClient.SqlCommand.SqlCommand(string, System.Dati.SqlClient.SqlConnection)’ ha alcuni argomenti non validi e 2) Argomento 2:(conn.CreateCommand()) impossibile convertire da ‘del Sistema.Dati.SqlClient.SqlCommand’ a ‘del Sistema.Dati.SqlClient.SqlConnection

Lascia un commento