Hace poco tuve que hacer un backup de una base de datos de SQL Server y restaurarla (restore) en otro servidor distinto.
Para hacer el respaldo (backup) en el servidor de origen, usando Microsoft SQL Server Management Studio Express, haces clic con el botón derecho en la base de datos y seleccionas Tasks -> Back Up...
Luego en la pantalla que aparece, seleccionas el tipo de backup llamado Full.
El archivo de respaldo quedará guardado en la ruta que aparece bajo el título Destination.
Ahora descarga ese archivo al servidor donde vas a restaurar la base de datos. Por cierto, ya tiene que existir la base de datos (aunque esté vacía) para que puedas restaurar la información.
Ahora conectado al servidor destino, haz clic en la base de datos donde deseas vaciar la información y haz clic con el botón derecho y selecciona Tasks -> Restore -> Database...
Selecciona la opción From device, haz clic en el botón con los tres puntitos, selecciona el archivo que descargaste y verás esta pantalla (asegúrate de marcar la casilla bajo Restore):
Ahora haz clic en Ok.
Si ves el siguiente error:
Error 3154: The backup set holds a backup of a database other than the existing 'xxxx' database
entonces haz clic en la página Options en el panel izquierdo y marca la casilla Overwrite the existing database:
Y listo, con eso se restaurarán todos los elementos de tu base de datos original.
Actualización:
Lo que he visto es que el usuario que tenías asignado a la base de datos se corrompe. Simplemente crea otro usuario con un nombre distinto y vuelve a asignarle el ownership y los permisos a la base de datos, y listo.
A veces es necesario insertar un valor nulo (null) en una base de datos de SQL Server usando ASP.NET.
Esto puede ocurrir ya sea en un insert o un update.
Suponiendo que el tipo de datos en la base de datos es un smallint y sabiendo que en ASP.NET corresponde a un tipo de datos Int16, ésta es la manera de declarar un entero nulo:
Dim EnteroNulo As Nullable(Of Int16) = Nothing
Y listo, ahora lo puedes usar en tu DAL o BLL:
Dim RenglonesAfectados As Integer = Adapter.ModificaTabla(Fecha, EnteroNulo)
Si vas a implementar el Membership Provider de ASP.NET con SQL Server, seguramente encontrarás mucha información en Internet de cómo hacerlo. La parte que no todo mundo explica es cómo crear las tablas que contendrán toda la información de nombres de usuario, contraseñas, roles, etc.
Las tablas se crean mediante la herramienta aspnet_regsql.exe que se encuentra en el directorio de la versión del Framework que estés usando (ejemplo: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727). Si usas la versión 3.5 tienes que usar la herramienta que viene en el fólder de la versión 2.
Abre una ventana de MS-DOS y cámbiate a dicho fólder:
La sintáxis de la herramienta es:
Option
Description
-?
Prints Aspnet_regsql.exe Help text in the command window.
-W
Runs the tool in wizard mode. This is the default if no command-line arguments are specified.
-C<connection string>
Specifies the connection string to the computer running SQL Server where the database will be installed, or is already installed. This option is not necessary if you specify only the server (-S) and login (-U and -P, or -E) information.
-S<server>
Specifies the name of the computer running SQL Server where the database will be installed, or is already installed.
-U<login ID>
The SQL Server user ID to log in with. This option also requires the password (-P) option. This option is not necessary if you are authenticating using Windows credentials (-E).
-P<password>
The SQL Server password to log in with. This option also requires the user ID (-U) option. This option is not necessary if you are authenticating using Windows credentials (-E).
-E
Authenticates using the Windows credentials of the currently logged-on user.
-sqlexportlonly<filename>
Generates a SQL script file that can be used to add or remove the specified features. The specified actions are not performed.
Option
Description
-Aall|m|r|p|c|w
Adds support for one or more ASP.NET application services. Service identifiers can be specified together or separately. The following identifiers are used for ASP.NET application services:
all – All services, including common tables and stored procedures shared by the services
m – Membership
r – Role Manager
p – Profile
c – Web Parts Personalization
w – Web Events
-Rall|m|r|p|c|w
Removes support for one or more application services. Service identifiers can be specified together or separately. The following identifiers are used for ASP.NET application services:
all – All services, including common tables and stored procedures shared by the services
m – Membership
r – Role Manager
p – Profile
c – Web Parts Personalization
w – Web Events
-Q
Runs the tool in quiet mode and does not confirm before removing an application service.
-d<database>
Specifies the name of the database to create or modify for use with application services. If the database is not specified, the default database name of “aspnetdb” is used.
-S va seguido del nombre de tu servidor, ya sea en tu red local o en Internet (usa la IP) -U va seguido de tu nombre de usuario -P va seguido de tu contraseña -A va seguido de “mr” ya que queremos habilitar el Membership y Role. -d va seguido del nombre de tu base de datos
Listo, ahora solamente verifica que se crearon las tablas correctamente:
Actualización 2008-05-10
Para entender cómo están relacionadas las tablas entre sí, puedes revisar el siguiente diagrama:
El siguiente paso sería crear el connectionString en tu archivo web.config, ponlo bajo la sección configuration:
Y luego, bajo la sección system.web coloca lo siguiente:
<!-- The <authentication> section enables configuration of the security authentication mode used by ASP.NET to identify an incoming user.--><authentication mode="Forms"><forms loginUrl="~/Default.aspx"
name=".ASPXFORMSAUTH"
timeout="300"/></authentication><roleManager
defaultProvider="MiRoleProvider"
enabled="true"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All"><providers><clear/><add name="MiRoleProvider"
connectionStringName="MiConnectionString"
applicationName="NOMBREAPP"
type="System.Web.Security.SqlRoleProvider"/></providers></roleManager><membership defaultProvider="MiMembershipProvider"><providers><clear/><add
name="MiMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MiConnectionString"
applicationName="NOMBREAPP"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Clear"/></providers></membership>
Con esto le indicas a tu aplicación que utilice para la autenticación la base de datos que creaste al inicio.
Ahora, para crear usuarios y roles utiliza la herramienta que viene incluida con Visual Web Developer 2008, haz clic en Website -> ASP.NET Configuration:
Esto abrirá una ventana de tu navegador y podrás ver la página administrativa en la que puedes crear roles, usuarios y asignar esos usuarios a los roles que desees. Esta página administrativa, para conectarse a la base de datos, utiliza los valores establecidos en el web.config.
Ya no explico cómo usar esta herramienta porque es muy sencilla.
Si estás trabajando en un servidor local y creaste algunos roles y usuarios, y tienes que subir esa información al servidor con algún programa de sincronización de bases de datos, hazlo en este orden para evitar errores de integridad referencial:
La siguiente tabla no debe ser sincronizada porque el procedimiento de aspnet_regsql rellena la información necesaria: aspnet_SchemaVersions
Es importante establecer los tipos de datos correctos en las variables de ASP.NET que utilizas para realizar operaciones con datos que provienen de una base de datos de SQL Server. Pero ¿qué tipos de datos cuando estás programando en ASP.NET corresponden a cada tipo de datos definido en SQL Server?
Aquí esta la lista de equivalencias:
SQL Server data type
CLR data type (.NET Framework)
varbinary
Byte[]
binary
Byte[]
varbinary(1), binary(1)
byte, Byte[]
image
None
varchar
None
char
None
nvarchar(1), nchar(1)
Char, String, Char[]
nvarchar
String, Char[]
nchar
String, Char[]
text
None
ntext
None
uniqueidentifier
Guid
rowversion
Byte[]
bit
Boolean
tinyint
Byte
smallint
Int16
int
Int32
bigint
Int64
smallmoney
Decimal
money
Decimal
numeric
Decimal
decimal
Decimal
real
Single
float
Double
smalldatetime
DateTime
datetime
DateTime
sql_variant
Object
User-defined type(UDT)
Same class that is bound to the user-defined type in the same assembly or a dependent assembly.
Estoy usando .NET 2. Tengo mi archivo .XSD (Data Layer) y mi Business Logic.
El caso es que en el .XSD estoy poniendo esta consulta:
SELECT * from tabla where nombre LIKE ?
Yo quería encontrar cualquier campo que contuviera el string solicitado, es decir, si alguien buscaba “pa”, la sentencia debía regresar valores como “paco”, “palabra”, “pais”, etc. Pero con el LIKE solamente regresaba el valor si la coincidencia era exacta.
Otros intentos que hice fueron:
SELECT * from tabla where nombre LIKE '%?%'
SELECT * from tabla where nombre LIKE %?%
SELECT * from tabla where nombre LIKE %?%
Ninguno sirve porque al parecer al definir la sentencia SQL en el archivo .XSD, el signo de interrogación no puede tener ningún comodín.
Entonces busqué alguna función que pudiera ayudarme, y al final lo logré. La sentencia debe quedar así:
SELECT * from tabla where (INSTR(nombre,?) > 0)
INSTR(str,substr) devuelve la posición de la primera ocurrencia de substring en la cadena de texto str.
Así que si devuelve un número mayor a cero, significa que lo encontró.
Ahora bien, siendo más estrictos, lo que yo quería era que encontrara el principio de la palabra. Es decir, si alguien buscaba por “yo” debería encontrar “yolanda”, pero no “pelayo”. Entonces necesitaba algo que le indicara que buscara solamente al principio del campo.
Así es como lo logré:
SELECT * from tabla where nombre REGEXP CONCAT('^',?)
expr REGEXP pat realiza una búsqueda de expresiones regulares en la cadena expr usando el modelo pat.
CONCAT(cad1, cad2, ...) une cadenas de texto.
Es decir que al ejecutarse: SELECT * from tabla where nombre REGEXP CONCAT('^','yo')
Se convierte en: SELECT * from tabla where nombre REGEXP '^yo'
Como sabes, el símbolo ^ en expresiones regulares, significa el inicio de una palabra.
El signo ‘?’ es por si estás utilizando MySQL.
Si utilizas SQL Server, cambia el ‘?’ por ‘@Nombre’ o cualquiera que sea el nombre de tu parámetro.