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;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;
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.
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).
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:
Bueno amigos, espero les sea de ayuda, próximamente subiré videos.
[...] Nota: Debe configurar la cadena de conexión a la base de datos, vea la entrada anterior: http://sqlpsykrest.wordpress.com/2009/05/14/vs-2008asp-net-crear-una-cadena-de-conexin-en-asp-net-y-… [...]
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
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
Esya chido ese ivan, faltan muchos como tu que conpartan sus conocimientos, chido chavo, cuidate chavacano
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
Saludos podrías ser más explicita en lo que quieres, para poder ayudarte.
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
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
Hola, muy bueno el aporte..
psykrest, oie muchas gracias por los codigos me han servido de mucho…graicas
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;
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 !!!!
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
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…
Gracias hermano. Me sirvió muchísimo. Gracias totales!
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 !!
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
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
estuvo bueno me sirvio de mucho muchas gracias