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

14 05 2009

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.


Acciones

Información

19 respuestas

15 05 2009
9 06 2009
Rafael Elias

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

9 06 2009
psykrest

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: http://sqlpsykrest.wordpress.com, confirmas el correo del voto y listo
Espero sin duda contar contigo, saludos

10 07 2009
cafesin

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

19 08 2009
conociendo

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

20 08 2009
psykrest

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

10 09 2009
Geovany

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

12 09 2009
psykrest

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

25 03 2010
LAGUNA

Hola, muy bueno el aporte..

21 09 2010
Pipeman

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

19 11 2010
elias

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;

4 08 2011
sussanitta

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 !!!!

4 08 2011
sussanitta

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

12 10 2011
psykrest

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…

11 12 2011
jalberto

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

16 03 2012
perdido

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 !!

16 03 2012
perdido

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

16 03 2012
interrogante

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

21 03 2012
andres angulo

estuvo bueno me sirvio de mucho muchas gracias

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.