[VS 2008–ASP NET] Crear una cadena de conexión en ASP .NET y ejecutar un comando a una BD de SQL Server 2008.


Saludos amigos, en esta ocasión les mostrare un ejemplo de como crear una cadena de conexión en ASP .NET con Visual Studio 2008 hacia una base de datos creada en SQL Server 2008.

1. El primer paso es conocer la siguiente información de la base de datos y la instancia de SQL a la cual nos vamos a conectar.

a) Nombre de la instancia.

b) Nombre de la base de datos.

c) Usuario y contraseña del usuario que tiene permisos sobre la base de datos.

Ejemplo:

Instancia: EQUIPO.

BD: prueba.

User: sa.

Pass: sasysadmin.

Nota: Si no conoces el nombre de la instancia del SQL server ejecuta el siguiente comando.

USE master;
GO
SELECT [name], data_source FROM sys.servers;

Resultado:

image

Nota: SI quieres ver las bases de datos que están en la instancia del SQL server ejecuta el siguiente comando.

USE master;
GO
SELECT [name] FROM sys.databases;

Resultado:

image

2.  Ahora creamos un nuevo sitio Web en Visual Studio 2008, en el archivo de configuración Web ( web.config ), buscamos el elemento <connectionStrings> contenido dentro del elemento raíz <configuration> y agregamos una cadena de conexión como lo muestra el siguiente ejemplo:

<connectionStrings>
    <add name="cnxCurso"
         connectionString="Data source=EQUIPO; Initial catalog=Prueba; User id=admIvan; Password=123456"
         providerName="System.Data.SqlClient"/>
  </connectionStrings>

Explico brevemente la cadena:

Deben dar un nombre a la cadena de conexión en esta caso la llamaremos CNX .

El atributo connectionString debe tener los siguientes datos:

Data source es la instancia que utilizamos en SQL Server.

Initial catalog es el nombre de la base de datos a utilizar.

User id es el nombre de usuario que se conectara a la base de datos.

Password es la contraseña del usuario de la base de datos.

Por último el providerName que es un espacio de nombres de System.Data.SqlClient.

3. Agregaremos dos cajas de texto, un botón y una etiqueta en un formulario web.

image

4. En el Code-Behine de nuestro formulario web agregamos los siguientes espacios de nombres necesarios para conectarnos a las base da datos y trabajar de manera efectiva.

Nota: Para ir al code-behine debemos presionar la tecla F7 estando en el formulario Web.

Imports System.Web
Imports System.Web.Configuration

Imports System.Data
Imports System.Data.SqlClient

5. Agregar el siguiente código en el evento clic del botón del formulario web.

Protected Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAceptar.Click

        Dim idUsuario As Integer = 0
        Dim msg As String = "Usuario no encontrado en la base de datos."

        Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("cnxCurso").ConnectionString)
        Dim comm As New SqlCommand("SELECT id FROM dbo.PRB_Usuario WHERE Email = @email AND [Password] = @pass", conn)

        Try

            With comm
                .CommandType = CommandType.Text
                .Parameters.AddWithValue("email", Me.txtUser.Text.Trim())
                .Parameters.AddWithValue("pass", Me.txtPass.Text.Trim())
            End With

            Using conn
                conn.Open()

                With comm

                    idUsuario = .ExecuteScalar()
                    .Parameters.Clear()
                    .Dispose()

                End With

                If idUsuario > 0 Then
                    msg = "El usuario esta registrado en la base de datos."
                End If

            End Using

        Catch ex As SqlException
            'Controlar excepción SQL
        Catch ex As Exception
            'Controlar exception
        Finally
            If conn.State = ConnectionState.Open Then
                conn.Close()
                conn.Dispose()
            End If

        End Try

        Me.lblMsg.Text = msg

    End Sub

 

Es importante poner atención a la hora de crear la cadena de conexión ya que el nombre debe de ser el mismo al que se agrego en el archivo de configuración web (web.config).

image

El comando al crearlo lleva dos parámetros iniciales, el comando de base de base de datos ( el cual selecciona el id de nuestro usuario) , y la cadena de conexión que utilizara para llevar acabo la ejecución.

Agregamos los parámetros que recibirá el comando para poder consultar los datos, a esto se le llama parametrizar sentencias o comandos SQL, para evitar los ataques de inyección de código.

Para terminar se abre la conexión, y se ejecutamos el comando SQL de manera Scalar (ExecuteScalar), es decir que solo nos regrese el valor de la primer fila y primer columna del conjunto de resultados obtenidos, para este caso siempre nos regresara un valor, este valor se asigna a nuestra etiqueta que mostrara si el usuario se encuentra o no en la base de datos.

Resultado:

image

 

Bueno amigos, espero les sea de ayuda, próximamente subiré videos.

    • Rafael Elias
    • 9/06/09

    Muy interesante, gracias, sirve mucho para un aprendiz, tengo una duda si la coneccion quisiera hacerla en otro archivo, es decir en una clase para llamarla desde este formulario, si tuvieras un ejemplo me serviria de mucho gracias

    • psykrest
    • 9/06/09

    Hola Rafael, te dejo un breve ejemplo como guía:
    Tienes que tener un clase : ClConexion
    esta clase tiene una función compartida “Shared“, para poder acceder a ella sin necesidad de instanciar nuestra clase.
    Esta función regresa un tipo SqlConnection.
    Ej:
    Shared Function fnConexion() As SqlConnection
    Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings(“cnxDBGmX”).ConnectionString)
    Return conn
    End Function

    Ahora para utilizarla sería de la siguiente manera:
    Dim conn As SqlConnection = Nothing
    Try
    conn = ClConexion.fnConexion
    ‘Tu código aquí
    Catch ex As Exception
    ‘Manejo de la excepción
    end try
    espero te sirva, por favor apoyame votando por mi blog en: http://blogit.ms/topbloggers.aspx ahi seleccionas: https://sqlpsykrest.wordpress.com, confirmas el correo del voto y listo
    Espero sin duda contar contigo, saludos

    • cafesin
    • 10/07/09

    Esya chido ese ivan, faltan muchos como tu que conpartan sus conocimientos, chido chavo, cuidate chavacano

    • conociendo
    • 19/08/09

    ok esta bien el codigo, pero yo tengo que realizar un campo que genere la contraseña y este se envie a la base de datos, pero no me hace esta funcionalidad, alguien podra ayudarme

    • psykrest
    • 20/08/09

    Saludos podrías ser más explicita en lo que quieres, para poder ayudarte.

    • Geovany
    • 10/09/09

    Hola, primero q todo muchas gracias muy buen ejemplo, me sirvió mucho, pero me gustaría saber más sobre la parametrización de sentencias SQL para evitar inyección de código, pues no entiendo eso. Con base en tu ejemplo, realicé algo un poco diferente, mas corto, y lo q hace es ingresar un registro en la bd, funciona pero no se si sea seguro y correcto hacerlo así, aqui está:

    Protected Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
    Dim mail, pass As String
    Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings(“cnxCurso”).ConnectionString)
    Dim commIn As New SqlCommand
    mail = txtUser.Text
    pass = txtPass.Text
    Try
    conn.Close()
    conn.Open()
    commIn.Connection = conn
    commIn.CommandText = “insert into PRB_Usuario (Id,Nombre,Apellidos,Email,Password) values (‘4′,’Juan’,’Perez’,'” & mail & “‘,'” & pass & “‘)”
    commIn.Cancel()
    commIn.ExecuteScalar()

    Catch ex As Exception

    End Try

    • psykrest
    • 12/09/09

    Saludos Geovany, Gracias por leer mi blog, efectivamente la forma en lo que lo gaces no es segura, pera evitar la inyección de código debes de aplicar paramatros o lo que se conoce como parametrización de sentencias en SQL, en el ejemplo que pongo utilizo parametros, si al ejemplo que mencionas se le aplican parametros quedaría de la siguiente forma:
    Dim mail, pass As String
    Dim conn As New SqlConnection(WebConfigurationManager.ConnectionStrings(”cnxCurso”).ConnectionString)
    Dim commIn As New SqlCommand
    mail = txtUser.Text
    pass = txtPass.Text
    Try
    conn.Close()
    conn.Open()
    commIn.Connection = conn
    commIn.CommandText = “insert into PRB_Usuario (Id,Nombre,Apellidos,Email,Password) values (@nombre,@apellidos,@mail,@pass)”
    WITH commIn
    .CommandType = CommandType.Text
    .Parameters.AddWithValue(“nombre”, “Juan”)
    .Parameters.AddWithValue(“apellidos”, “Pérez”)
    .Parameters.AddWithValue(“mail”, Me.txtUser.Text.Trim())
    .Parameters.AddWithValue(“pass”, Me.txtPass.Text.Trim())
    .ExecuteNonQuery()
    END WITH
    Catch ex As Exception

    End Try

    Espero te sirva de ayuda, por favor apoyame votando por mi blog. xD

    • LAGUNA
    • 25/03/10

    Hola, muy bueno el aporte..

    • Pipeman
    • 21/09/10

    psykrest, oie muchas gracias por los codigos me han servido de mucho…graicas

  1. hola man hice la prueba de conectar una base de datos el problema es que no se como se llama el servidor o equipo y quiero saber donde es que pones el codigo este
    USE master;
    GO
    SELECT [name], data_source FROM sys.servers;

  2. Tengo un error

    Lo pasé a C#, todo esta bién solo me da un error en esta:
    int idUsuario = 0; (declarado arriba)

    dentro del try:

    var _with2 = comm;
    idUsuario = _with2.ExecuteScalar();

    Error 1 Cannot implicitly convert type ‘object’ to ‘int’. An explicit conversion exists (are you missing a cast?)

    Ayudame !!!!

  3. Ya lo resolví se los compartó:

    protected void btnAceptar_Click(object sender, EventArgs e)
    {

    int idUsuario = 0;
    string msg = “Usuario no encontrado en la base de datos.”;

    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings[“cnx”].ConnectionString);
    SqlCommand comm = new SqlCommand(“SELECT idUsuario FROM dbo.tbUsuarios WHERE Usuario = @usuario AND [Contrasena] = @pass”, conn);

    try {

    comm.CommandType = CommandType.Text;
    comm.Parameters.AddWithValue(“usuario”, this.txtUser.Text.Trim());
    comm.Parameters.AddWithValue(“pass”, this.txtPass.Text.Trim());

    using (conn)
    {
    conn.Open();
    idUsuario= Convert.ToInt32(comm.ExecuteScalar());
    comm.Parameters.Clear();
    comm.Dispose();

    if (idUsuario > 0) {
    msg = “El usuario esta registrado en la base de datos.”;
    }

    }

    }

    catch (SqlException ex)
    {}

    finally
    {
    if (conn.State == ConnectionState.Open)
    {
    conn.Close();
    conn.Dispose();
    }
    }

    this.lblMsg.Text = msg;

    }
    }

    ————————- en el web.config

    • psykrest
    • 12/10/11

    OK en el SQL Server 2008 abres una nueva consulta y ahi pegas el codigo.

    algo para identificar el nombre de tu server es la siguiente instruccion:

    USE master;
    GO
    SELECT [name], data_source FROM sys.servers;

    SELECT @@servername;

    Ivan…

    • jalberto
    • 11/12/11

    Gracias hermano. Me sirvió muchísimo. Gracias totales!

    • perdido
    • 16/03/12

    ke tal necesito codigos ejemple para conectar una base de datos en MySQL con Visual Studio 2008 para insertar datos en la base dedatos …. pero solo eso…. insertar datos, y que me notifique ke fueron guardados los datos… No kiero ke me los muestre de vuelta en un DataGridView o en las mismas cajas de texto. SOLO KIERO USARLA PARA INSERTAR DATOS he intentado hacerla, uso una CLase para manejar las excepsiones al momento de utilizar SELECT…. y no tuve problema …. Pero al Momento de definir bien el try y el catch para INSERT fue donde tuve problemas…. ME PERDI !!!!!! Auxilioo !!!! Si tienes Algun ejemplo me sería de gran utilidad

    Gracias !!

    • perdido
    • 16/03/12

    Aqui les dejo la clase … o lo poco ke llevo de ella….. como veran el metodo para el INSERT esta vacío =S

    Imports MySql.Data.MySqlClient
    Imports MySql.Data
    Imports System.Data.SqlClient
    Imports System.Data.Odbc

    Public Class basedatos

    ‘conexion mediante ODBC

    Public DSN_BD As String = “__DB__tercera”
    Public conexion As Odbc.OdbcConnection
    Public resultado As Odbc.OdbcDataReader

    Dim comodin As Odbc.OdbcDataAdapter

    ‘——————–
    Public escribir As Odbc.OdbcDataReader
    ‘———————–

    Public Enum eResultadosTransaccionBD

    cFaltaCapturar = 0
    cErrorDesconocido = 1
    cErrorConexion = 2
    cTransaccionSatisfactoria = 3
    cInformacionNoEncontrada = 4
    cDatosYaExistentes = 5
    cCancelacionPorUsuario = 6
    cCancelacionPorSistema = 7

    End Enum

    Public Enum eResultadoInstruccionDML

    cHayRegistros = -1
    cNoHayRegistros = 0
    cErrorEnConsulta = 1

    End Enum

    Public Function ejecutarInstruccionesSQLDML(ByVal consulta_sql As String) As eResultadoInstruccionDML

    Try
    Dim d As New Data.Odbc.OdbcCommand(consulta_sql, conexion)
    d.CommandType = CommandType.Text
    resultado = d.ExecuteReader()

    If resultado.HasRows = True Then
    Return eResultadoInstruccionDML.cHayRegistros
    Else
    Return eResultadoInstruccionDML.cNoHayRegistros

    End If

    Catch ex As Exception

    Return eResultadoInstruccionDML.cErrorEnConsulta

    End Try

    End Function

    ‘***** ejecutarInstruccionSQLDDL(consulta_sql As String) As Integer **********
    ‘****** *******
    ‘*****************************************************************************

    Public Function ejecutarInstruccionesSQLDDL(ByVal consulta_sql As String) As eResultadosTransaccionBD

    ”Dim conexion As New SqlConnection(“Data Source=localhost; Initial Catalog=Empleados; user id=; password=;”)

    ”Dim d As New Data.Odbc.OdbcConnection(“insert into empleado values(“”)”)

    ‘resultado =

    Dim d As New Data.Odbc.OdbcCommand(consulta_sql, conexion)
    d.CommandType = CommandType.Text ‘string

    ‘d.CommandType = CommandType.StoredProcedure

    ‘d.Parameters.AddWithValue(“insert into empleado values()”, d)


    ‘Dim conexion As New SqlConnection(“Data Source=LOCALHOST; Initial Catalog=Empleados; user id=; password=;”)
    ‘ Dim comando As New SqlCommand(“INSERT INTO Empleados Values(@id, @nombre)”, conexion)
    ‘comando.Parameters.AddWithValue(“@id”, 1)
    ‘comando.Parameters.AddWithValue(“@nombre”, “jojojo”)


    ‘comando.CommandType = CommandType.Text
    ‘conexion.Open()
    ‘comando.ExecuteNonQuery()
    ‘conexion.Close() ‘


    ‘comando.CommandType = CommandType.StoredProcedure

    End Function

    Public Function verificarExistencia(ByVal tabla As String, ByVal campo As String, ByVal valor As Long) As Boolean

    Me.ejecutarInstruccionesSQLDML(“select” & campo & ” from ” & tabla & “where” & campo & “=” & valor)
    Return resultado.Read

    End Function

    Protected Overrides Sub finalize()
    Try
    conexion.Close()
    resultado.Close()
    Catch
    End Try
    MyBase.Finalize()
    End Sub

    Public Sub cerrarBD()

    conexion.Close()
    Try
    resultado.Close()
    Catch
    End Try
    End Sub

    Public Sub New()
    Try
    conexion = New Data.Odbc.OdbcConnection(“DSN=” & DSN_BD)
    conexion.Open()

    Catch ex As Exception

    MsgBox(“No se puede conectar la base de datos debido al siguiente error: ” & vbCrLf & vbCrLf & ex.Message)

    End Try
    End Sub

    End Class

    • interrogante
    • 16/03/12

    Saludos !!! Puedes ayudarme a terminar esta clase para insertar en BD MySQL con Visual Studio 2008
    ??????????????’ porfavor

    Imports MySql.Data.MySqlClient
    Imports MySql.Data
    Imports System.Data.SqlClient
    Imports System.Data.Odbc

    Public Class basedatos

    ‘conexion mediante ODBC

    Public DSN_BD As String = “__DB__tercera”
    Public conexion As Odbc.OdbcConnection
    Public resultado As Odbc.OdbcDataReader

    Dim comodin As Odbc.OdbcDataAdapter

    ‘——————–
    Public escribir As Odbc.OdbcDataReader
    ‘———————–

    Public Enum eResultadosTransaccionBD

    cFaltaCapturar = 0
    cErrorDesconocido = 1
    cErrorConexion = 2
    cTransaccionSatisfactoria = 3
    cInformacionNoEncontrada = 4
    cDatosYaExistentes = 5
    cCancelacionPorUsuario = 6
    cCancelacionPorSistema = 7

    End Enum

    Public Enum eResultadoInstruccionDML

    cHayRegistros = -1
    cNoHayRegistros = 0
    cErrorEnConsulta = 1

    End Enum

    Public Function ejecutarInstruccionesSQLDML(ByVal consulta_sql As String) As eResultadoInstruccionDML

    Try
    Dim d As New Data.Odbc.OdbcCommand(consulta_sql, conexion)
    d.CommandType = CommandType.Text
    resultado = d.ExecuteReader()

    If resultado.HasRows = True Then
    Return eResultadoInstruccionDML.cHayRegistros
    Else
    Return eResultadoInstruccionDML.cNoHayRegistros

    End If

    Catch ex As Exception

    Return eResultadoInstruccionDML.cErrorEnConsulta

    End Try

    End Function

    ‘***** ejecutarInstruccionSQLDDL(consulta_sql As String) As Integer **********
    ‘****** *******
    ‘*****************************************************************************

    Public Function ejecutarInstruccionesSQLDDL(ByVal consulta_sql As String) As eResultadosTransaccionBD

    ”Dim conexion As New SqlConnection(“Data Source=localhost; Initial Catalog=Empleados; user id=; password=;”)

    ”Dim d As New Data.Odbc.OdbcConnection(“insert into empleado values(“”)”)

    ‘resultado =

    Dim d As New Data.Odbc.OdbcCommand(consulta_sql, conexion)
    d.CommandType = CommandType.Text ‘string

    ‘d.CommandType = CommandType.StoredProcedure

    ‘d.Parameters.AddWithValue(“insert into empleado values()”, d)


    ‘Dim conexion As New SqlConnection(“Data Source=LOCALHOST; Initial Catalog=Empleados; user id=; password=;”)
    ‘ Dim comando As New SqlCommand(“INSERT INTO Empleados Values(@id, @nombre)”, conexion)
    ‘comando.Parameters.AddWithValue(“@id”, 1)
    ‘comando.Parameters.AddWithValue(“@nombre”, “jojojo”)


    ‘comando.CommandType = CommandType.Text
    ‘conexion.Open()
    ‘comando.ExecuteNonQuery()
    ‘conexion.Close() ‘


    ‘comando.CommandType = CommandType.StoredProcedure

    End Function

    Public Function verificarExistencia(ByVal tabla As String, ByVal campo As String, ByVal valor As Long) As Boolean

    Me.ejecutarInstruccionesSQLDML(“select” & campo & ” from ” & tabla & “where” & campo & “=” & valor)
    Return resultado.Read

    End Function

    Protected Overrides Sub finalize()
    Try
    conexion.Close()
    resultado.Close()
    Catch
    End Try
    MyBase.Finalize()
    End Sub

    Public Sub cerrarBD()

    conexion.Close()
    Try
    resultado.Close()
    Catch
    End Try
    End Sub

    Public Sub New()
    Try
    conexion = New Data.Odbc.OdbcConnection(“DSN=” & DSN_BD)
    conexion.Open()

    Catch ex As Exception

    MsgBox(“No se puede conectar la base de datos debido al siguiente error: ” & vbCrLf & vbCrLf & ex.Message)

    End Try
    End Sub

    End Class

    • andres angulo
    • 21/03/12

    estuvo bueno me sirvio de mucho muchas gracias

  4. te informo que esta chevere el código pero me sale un error que dice “LAS INSTRUCCION NO ES VALIDA EN UN ESPACIO DE NOMBRE”

    Y me hace referencia a:

    Protected Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAceptar.Click

    No se que estoy haciendo mal me puedes ayudar como solucionar aquello ???

    • psykrest
    • 15/08/12

    debes de verificar que tengas un botón llamado “btnAceptar”, Saludos

    • Yoake
    • 21/05/13

    Yo tengo un problema tengo este metodo para insertar
    ALTER PROCEDURE [dbo].[Imserta_laboratorio]
    @nom varchar (65),
    @nomater varchar (65)
    as

    declare @idlabmater int
    select @idlabmater = Idmateria from Materia where nombre_materia=@nomater

    Insert laboratorio(nomlab,lab_materia)
    values (@nom,@idlabmater)

    Pero cuando Inserto desde visual no inserta nada D: , alguien sabe por que?
    sqlcomm3.Connection = conexion
    sqlcomm3.CommandText = “Imserta_laboratorio”

    Dim str As String
    str = ComboBox2.SelectedItem

    sqlcomm3.Parameters.Add(“@nom”, SqlDbType.VarChar).Value = TextBox1.Text
    sqlcomm3.Parameters.Add(“@nomater”, SqlDbType.VarChar).Value = str

    sqlcomm3.CommandType = CommandType.StoredProcedure

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: