8

Si tengo una cadena de conexión definida en mi archivo web.config, ¿cómo puedo crear una conexión al SQL db desde C# código (lo olvidé de especificar) y luego llamar a un procedimiento almacenado. Luego me gustaría usar estos datos de alguna manera como mi DataSource para un GridView.Llamar a un procedimiento almacenado con asp.net

Así es como la cadena de conexión se define en el web.config:

<connectionStrings> 
<add name="db.Name" connectionString="Data Source=db;Initial Catalog=dbCat;User ID=userId;Password=userPass;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

El servidor db es un servidor Microsoft SQL.

Esto es lo que estaba buscando:

ConnectionStringSettings conSet = ConfigurationManager.ConnectionStrings["db.Name"]; 
SqlConnection con = new SqlConnection(conSet.ConnectionString); 

El código para obtener los datos es bastante trivial. Estaba más interesado en acceder desde una variable connectionString en el archivo web.config.

+0

¿Qué tipo de base de datos? – N0Alias

+1

¿Estás usando vb.net o C#? (Solo para ayudarte con la sintaxis). – JonH

Respuesta

6

Si se trata de un archivo de recursos como tal :

private static readonly string connString = Resource1.connString;

Dónde connString es el nombre de la clave. Si se trata de un archivo de web.config

Algo así:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"]; donde conn se define en el archivo de configuración web.

<add key="strConn" value="User ID=test;Password=test;Initial Catalog=TestDB;Data Source=NameOfServer;"/> 

continuación, llame al procedimiento almacenado:

//connString = the string of our database app found in the resource file 
       using (SqlConnection con = new SqlConnection(connString)) 
       { 
        using (SqlCommand cmd = new SqlCommand("EMPDLL_selClientByClientID", con)) 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 
         cmd.Parameters.Add("@ClientID", SqlDbType.VarChar).Value = cID; 
         con.Open(); 

         using (SqlDataReader reader = cmd.ExecuteReader()) 
         { 
          if (reader.HasRows) 
          { 
           if (reader.Read()) 
           { 
             //more code 
           } 
          } 
         } 
        } 
        } 

Eso es si está codificando en C#, VB.net es el mismo trato sólo un poco más prolijo :), he aquí una pequeña muestra:

Public Sub DeleteEmployee(ByVal lVID As Long) 
     Dim conMyData As SqlConnection 
     Dim cmdDelete As SqlCommand 

     Try 
      conMyData = New SqlConnection(connString) 
      cmdDelete = New SqlCommand("delEmployee", conMyData) 

      With cmdDelete 
       .CommandType = CommandType.StoredProcedure 
       'add the parameters 
       .Parameters.Add("@LoginID", SqlDbType.BigInt).Value = lVID 'the request 
       conMyData.Open() 'open a connection 
       .ExecuteNonQuery() 'execute it 
      End With 

     Catch ex As Exception 
      Throw ex 
     Finally 
      cmdDelete = Nothing 
      conMyData.Close() 
      conMyData = Nothing 
     End Try 
    End Sub 

Por supuesto, debe usar una declaración using en lugar de try/catch/finally para asegurarse de que limpia los recursos que están siendo utilizados.

+0

No deseo agregar una clave a mi web.config (de lo contrario, tengo que editar varios archivos web.config) o escribirla como una variable estática. ¿Es posible acceder a la cadena de conexión si está definida en mi web.config como en mi publicación? – onit

+0

@onit que está dentro de un archivo de configuración web. – JonH

+0

@onit - si solo desea esa sección específica, puede hacer '_SQLDBConnString = System.Configuration.ConfigurationManager.ConnectionStrings (1) .ConnectionString() 'y utilice la propiedad ConnectionStrings en lugar de la sección' appsettings'. – JonH

3

Algo como esto ...

using (var con = new SqlConnection(_connectionString)) 
{ 
    using (var cmd = new SqlCommand(_storedProcedureName, con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@pMyParamater", myParamaterValue); 
     con.Open(); 

     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // do something with the row 
      } 
     } 
    } 
} 

Todo esto es bastante simple para ser honesto, usted debería ser capaz de encontrar todo lo que necesita de la ADO.NET documentation

+1

¿Ack si conoce el tipo de por qué 'var'? – JonH

+0

Me doy cuenta de que esto no es algo complicado. Me preguntaba si alguien podría señalarme en la dirección correcta ya que, literalmente, comencé la programación de .NET. – onit

+2

@onit Sí, me doy cuenta de que no fue una crítica. Si eres nuevo en algo, es bueno adquirir el hábito de leer la documentación como primer punto. Luego, haga una pregunta más específica sobre SO si aún se queda atascado. Aprenderá más de esa manera, y evitará algunos de los malos consejos que a veces se dan en este sitio. – fearofawhackplanet

Cuestiones relacionadas