Notas, apuntes, articulos sobre tecnologia .Net en general
Hola Esteban
Bienvenido a Geeks.ms, como me dijeron a mi...
Espero disfrutar tambien de tus articulos.
¡¡¡BIENVENIDO Esteban!!!
Muchas gracias por mentarme (¡que sorpresa!), y espero que nos puedas contar cosas interesantísimas.
Algo (sugerencia por si acaso te apetece) de lo que no se ha hablado apenas en Geeks.ms, es DotNetNuke, sus skins, como se instala, como se gestiona, trucos,... es un mundo interesantísimo dónde muchas empresas ponen sus ojos a la hora de crear un sitio Web. Puede ser un tema sin explotar en el cuál puedas contarnos tus experiencias y vivencias, aunque seguro que puedes hacer lo mismo con cualquier tema que quieras tocar.
Lo dicho, bienvenido y espero que nos puedas contar pronto muchas cosas interesantes. :-)
BIENVENIDO Esteban !!!!!
Yo tb espero poder sacarle jugo a tu nuevo Blog y como dice PataNegra Serrano aka Jorge, podría ser interesante que nos instruyeras sobre DotNetNuke :)
Salu2
¡Bienvenido Esteban!
Hola Esteban!!!
Ps que más, eres bienvenido!!!, estoy a la espera de tus post, seguro que serán interesantes....
Por cierto, mi nombre es Percy Reyes, no "Percey" ... me regalaste un "e" demás ;)...
Saludos, y éxitos...
Nuevamente bienvenido!!!.
Percy Reyes,
Pudes ingresar ese mismo codigo en visual basic , si puedes te lo agradeceria un millon.
Gracias
Ivan, ahi publique el codigo en Visual Basic, Saludos
hola me gustaria saber como cambiarle el nombre al archivo por un codigo que yo tengo
hola me gustaria saber como cambiarle el nombre al archivo por un codigo que yo tengo gracias
hola xavier, explicame mejor que quieres hacer.
Saludos
Muy bueno el ejemplo me fue de mucha utilidad. Aprovecho de paso, para hacerte una consulta: sabes si es posible obtener determinados datos del archivo del cual estas haciendo upload? Necesitaria saber cual fue la fecha de ultima modificación del mismo.
Saludos,
Julio
Hola me ha servido bastante este codigo!! agradezco a tu persona que se tomo la molestia de publicar dicho codigo felicidades... ha solo para mencionar que el codigo vb despues de
Thread.Sleep(2000)
'hay que agregarle el
Clear()
Barbaro pero donde dice:
Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
deberia decir:
Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
Saludos Sergio!!!
Gracias por tu aclaracion, es bueno destacar que eso lo hice cambiandolo de pronto con notepad ++, muy buena tu aportacion
Hola, estoy tratando de usar tu codigo pero la pagina donde la estoy metiendo el ascx, esta en una master, ¿Crees qué eso le este afectando? por q no me muestra el progress bar
Esto...
Son 44.600 (cuarenta y cuatro mil seiscientos) millones de dólares.
El "billion" anglosajón es diferente al billón latino (un millón de millones).
Sólo es un apunte.
PS: Cómo me arrepiento de no haber invertido pasta en acciones de Yahoo hace un mes... Yo esto lo veía venir... :-(
Mil gracias!!!
pudiste instalarlo? porq yo baje el RTM desde p2p y me tira un error cuando comienza a hacer la instalacion.
Buenas, cansado de los diferentes releases del Service Pack 1 de Vista, veo un interesante truquillo
Saludos astilla, si ya lo instalamos y nos corre super bien, no tengo explicacion para tu problema
Oye que buen articulo, me ha sido muy util.. gracias
hola amigo esta interesante tu articulo, me podrias mandar el codigo a mi correo jonasjimenez@tabasco.gob.mx
de antemano gracias
Estaban, parece que copiaste el script para generar la tabla equivocada :P Era "Audit", no "dtAudit".
Heyy si muchas gracias lucas, si lo que pasaba era que tenia una version vieja y se llamaba dtaudit, mil gracias
yeahh ya ta bajando ;)
El problema de este tipo de auditorias es que no te dice quien ha realizado tal acción. Si tuvieses SingleSOn en la aplicación, aun se podría auditar de esta manera, pero si no, imposible. Habria que modificar las aplicaciones que modifican la base de datos con algo montado sobre Entreprise Library o Log4NET.
Carlos,
con este tipo de auditorías se puede obtener el usuario si con pequeños cambios a la aplicación.
Este sitio tiene información de como hacerlo:
www.auditdatabase.com
a mi me sirvió..
saludos,
Próspero
tuve un problema con el windows update q me queria actualizar el sonido, drive, y sofware y le di aceptar ahora no me actualiza y q tengo problemas con esto al actualizar me dice la maquina q puedo acer la verdad ayudenme como recupero el software
por lo visto si detecta incompatibilidades con hardware no te actualiza ni de broma.(me he enterado despues de volverme loco intentando actualizar) en mi caso creo que es la tarjeta de sonido segun he visto por ahi...espero que lo solucionen si no me voy pa'linux y al vista que le den...saludos a todos...
suerte alvaro en linux ubuntu o cualquiera de ellos ;) espero que no te pace la ley de "Tanto Ls para terminar en un Dir"
Cool tip
gracias
Siempre Bruno ;)
Buen dia, podrias indicarme la empresa de oigine e la empresa? tengo un paquete en la adun pero proveniente COHESION queria saber si se trataba del HCL kit.
Saludos!
Saludos Elias el paquete mio venia directamente de MICROSOFT
Kent, WA 98032 United States via DHL. Saludos
Proviene de la mis dirección el mio, el unico detalle es que en la declaración dice valor US$ 500 y la descripción dice "FREE SOFTWARE" y me estan cobrando cerca de US$ 400 por tramite de aduanas...
Hola que tal,una pregunta el kit lo pediste en www.heroescommunitylaunch.com o como hiciste el tramite para que te lo pudieran mandar, es que yo soy lider de comunidad en México, y si me interesa poder pedir un kit de esos, mi evento es en abril, y estamos a escasos 20 días.
Muchas gracias ..
Saludos Edison, pues si te fijas en un email que enviaron, ellos estan enviando de acuerdo a la fecha programada de tus eventos, yo tengo una presentacion el dia 4 de abril, y creo que por eso me llego rapido, asi que no te desesperes, creo que ya el tuyo debe de estar en camino... Saludos!!
PingBack desde Agregar un simple Trigger para auditar tu base de datos SQL Server
A nuestro grupo ya les llegó otras dos cajitas :D.
Saludos!!
Esto esta muy bueno muchas gracias!!,
en cuanto al nombre de usuario @UserName dara como resultado el "nombre de la maquina\nombre de la cuenta windows" en el caso de que se use autenticacion de windows para acceder a la base de datos, pero si se usa la autenticacion de sql server entonces la variable @UserName contedrá el nombre de usuario, por lo que se puede saber que usuario hizo que cambio. Muy bueno!!!
gracias d antemano... cuando hace el go.history(-1) no me pinta la imagen agregada en un objeto image asociado q he creado... debo hacer un postback o refresh y ya esta.... como lo puedo solucionar...
saludos
Creo que se han equivocado con el dishoso Ribbon, de hecho la adaptación al nuevo Office 2007, encuentra muchos detractores debido a este cambio, a mi juicio los menus tradicionales siguen siendo mas intuitivos, quizas porque llevemos muchos años manejandolos, aún asi creo que este es un cambio demasiado radical para la gente que lleva muchos años trabajando con sistemas de menus tradicionales, en fin veremos si lo mantienen en las próximas versiones.
Estoy totalmente de acuerdo contigo Juan Irogoyen, el cambio fue bastante radical que las personas todavia no han podido digerir, pero lo que hay que hacer es adaptarse y veras como te encontraras Ribbon bastante util.
Un abrazo compañero.
Saludos, si las voy a poner y estoy preparando una serie de post para usar Prototype en asp.net, espero tener tiempo y publicarlo, mantente al tanto
Yo manejo un esquema similar a este solo que con plantillas para generar los triggers, el caso es que siempre me encuentro con la dificultad de conocer el nombre de la transaccion o el nombre del SP que realizó el insert y por lo tanto que desencadenó el trigger.
hace rato que busco una solucion a este tema. te agradeceria si puedes ayudarme con eso
Hola:
el aporte esta muy bueno.
solamente una observacion, cuando en el codigo se crea la variable @sql encontre en SQL 2000 que si esta concatenacion tiene un largo de mas de 4000 da error ( y el error que da es totalmente desorientate porque da error como si estuviera algo mas escrito en el codigo).
la solucion fue dividir el codigo en dos
@sql = "select campos... bla bla bla"
@sql = @sql + "aca sigue el codigo"
Espero que le ahorre a alguien el dolor de cabeza que me dio esto a mi ayer jajaja.
tengo un error de audio ningun progama como windows media o itunes no reproduce se produce un error ayudame!!!!!!
Muy buen aporte, particularmente me fue de mucha utilidad.
Felicitaciones.
Pueden explicarme como hago uso de las suscripciones technet. Gracias
Bueno, yo creo que una gran idea para resolver el tema de saber quier realizó la acción, de forma facil y sin tener que hacer grandes modificaciones, se encuentra en esta página debetta.com/.../37.aspx
creo que tu ejemplo no se ajusta 100% a la realidad... ya que lo que muestras... en el mundo real no se usaria de ese modo....
los ejemplos de este tipo no demuestran lo que en la realidad pasaria ...., aunque si da una perspectiva de la velocidad .... no contempla todos los factores. te has puesto a pensar una app real.. que use linq cuantas veces aria llamadas a la db.. y eso como afectaria a la aplicacion.... no necesitan ser 10 000 llamadas en un bucle ( donde nadase hace entre llamada y llamda ) para hacer una aplicacion mas lenta.
personalmente a mi parecer LINQ es bonito y facil de usar... pero en cuestion de performance... creo que no es su "lado bonito"
esperemos que quiza en la V 3.0 de Linq las cosas mejoren :)
Ddaz
Saludos David, gracias por comentar, logicamente he hecho una prueba de una llamada con los distintas formas comunes que usamos los desarrolladores para conectarnos a la base de datos, es bien sabido que los Datareaders son bastante rapidos y todo eso, pero usar Datasets que es la forma mas comun de conexion no es la mas considerable, te puedo comentar que he trabajado con proyectos de mucha carga hechos en Linq To SQL y funcionan a la maravilla, pero bueno todo es cuestion de gustos. Saludos y se me cuida.
Hola :
bueno no se ... parece que entendiste que te recomendaba que uses Dataset... si fue asi... pues ... no era mi intencion esa... yo iba por otro punto....
por ejemplo alli haces llamadas puras .. sin que nada lo interfiera .. si bien ayudan de estadistica... no es lo que pasa en una app real...
en una app real tu controlas cuantas llamadas y que llamadas se hacen...( logicamente en linq puedes tbm controlar eso... pero cuantos lo hacen???.... es mucho mas codigo ... ) en linq tu codificas de unba forma " facil" ... pero te has puesto a pensar cuantas llamadas hay hacia la db... bueno hay otros puntos que ya puso jersson en su post, el cual creo ya leiste. geeks.ms/.../linq-cuestiones-de-performance.aspx .
como dijiste es cuestion de gustos.., linq de que funciona funciona ... pero como nada es gratis en la vida el costo que tiene linq quiza para unos sea demasiado caro.
pdta me pasaron este otro post .. checalo sobre optimizacion de linq : odetocode.com/.../12192.aspx
buenisimo..., por cierto tengo una tabla con 300 campos, es viable utilizar estos triggers para mi tabla o me va a colgar el sql express?
Gracias por el link, ciertamente el problema de linq son las llamadas que hacen, creo que no esta nada mal linq para estar primera vez entre la vida de los seres humanos, pero bueno, creo que en si, Linq si podria usarse con una DataAccess Layer que ya tenga uno implementada, depurada y que este funcionando, es decir estoy hablando de Linq To Object, y porque no, podriamos hacer nuestro propio provider.
Un saludo y se me cuida.
Hola de nuevo:
alli ya me comentas de otro modo de linq, no del Linq2Sql, algo que a mi parecer esta pasando ( y tbm al parecer de varios con los que platique) es que esto es casi casi como volver a los Dataset... si a esos con los cuales en el 2002 / 2003 empezo la promocion de .net y ya luego se tuvo que enseniar que eso no era lo " mejor" .. y en si que ni se recomendaba su uso... pero como ya el internet esta sobresaturado de info de conexiones a datos con datasets... hay muchas personas que empiezan y comenzaran usando datasets por que pensaran que es lo mas correcto ( debiendo usar por ejemplo listas genericas.) .
Igual y en la version 3.0 de linq o la 4.0 de Entity framework esto este corregido... ( en la madrugada con jersson nos alucinabamos unas soluciones bien fumadas... jeje ) ,... pero se volvera a repetir el ciclo... muchas personas "por comodidad", desinformacion y/o flojera seguiran usando el metodo incorrecto.... y esto se vuelve un circulo vicioso... asi como los paradigmas ... que puso jersson en un post. seria bueno que veas esto: blogs.zdnet.com/microsoft
Hola
En realidad el tema del uso de DataSets ha sido bien "bapuleado" y con razón en cuando a lo que el desempeño de la aplicación se refiere, pero por otro lado creo que tienen y han tenido su mérito en cuanto a la velocidad de desarrollo y simplicidad de uso, He visto que las comparaciones que haces no tomaste en cuenta a los tableAdapters, los ignoraste a estos por que internamente usan dataset ?
Que opinas de los TableAdapters? son muy "simpaticos" en cuanto a su uso, super amigable su generación y entiendo que su desempeño en cuanto a la consultas de lectura es bastante bueno
salu2
Sergio
Hola amigo, interesante el FileUpload, pero me gustaria saber como hago para guardar el archivo en un servidor remoto.
Hola disculpa como le hago para que el progres bar salga en la misma pagina en donde se ve al fileupload
de donde bajo el codigo fuente , gracias ?
Hola ccollado puedes bajarlo desde aqui
geeks.ms/.../download.aspx
Pudieramos tener acceso al codigo, fuente, es precisamente lo que estamos buscando hacer
Hola esteban, no se si me recuerdas/conoces yo estudie en ENAO, ssoy amigo de Jonathan(el manso), nada pasaba aver tu blog porque veo que me sigues en twitter, pura coincidencia ehh!!
Nada, un saludo men!! ah si y esta muy interesante tu blog
lo que quiero saber es como ingrear desde una caja de texto de vb.net hacia un archivo plano sin borrar el contenido anterior
:-(
Dexter, si no veo una foto tuya o algo viejo, no te voy a conocer :) un saludo
esta muy bueno el ejemplo ... buenaaaa
hola soy ilio, el de los videos, me gusta tu idea, quieres que te firme un contrato para que hagas unos videos de C# y LINQ
Saludos espinete, bueno el costo de envio de 250 sms via orange es un peso dominicano (RD$1.00) y ahora mismo en nuestro pais el Euro esta la compra a 49 pesos por euro, asi que puedes sacar tus calculos, con relacion a la pregunta que si el HTML debe estar bien formado, en principio podriamos decir que si, pero una de las particularidades que tiene HtmlAgilityPack es que al convertirla como XML puede ser que cierre algunos tags que talvez no se guardaron.
Fabramafioso puedes probarlo con WXP ya que lo importante es .net Framework 3.5 que lo trae VS 2008.
Hola, Muy buen aporte
Muy buen aporte
Una pregunta, el objeto Thread en donde lo declaraste?
Gracias.
Señor, cómo consigo la clase XDocument, yel Pack de HtmlAgilityPack
using HtmlAgilityPack;
Dónde lo puedo descargar ??
Gracias, saludos.
Saludos espinete puedes bajarlo desde aqui
www.codeplex.com/htmlagilitypack
y XDocument esta en System.Xml.Linq;
Hola. Muy bueno el ejemplo. Sin embargo, lo estoy probando (la versión VB) y cuando lo ejecuto sólo me pasa por el btnUpload_click si no hay ninguna ruta almacenada en el fileUpload. Si hay una ruta válida, no sólo no pasa, si no que me redirige a una página de error (Internet Explorer no puede mostrar la página web). Si sabeis como evitar esto, o teneis el codigo funcionando, os agradecería que me ayudáseis.
yo tambien necesitaria info de como hacer para ponerlo en un servidor remoto, y estaria barbaro q tenga una clase para achicar la imagen. gracias
Que tal,
Estoy probando el codigo, e hice varios cambios porque salian errores. El problema que tengo es que me sale un error al correrlo
Servidor: mensaje 311, nivel 16, estado 1, procedimiento ANULACION_ORDEN_COMPRA_ChangeTracking, línea 35
No se pueden usar columnas de tipo text, ntext o image en las tablas insertadas y eliminadas.
Tengo varias tablas con campos de tipo TEXT, como podria solucionar esto ??
Gracias de antemano.
John
@Carlos: Se puede hacer algun apaño ;)
Solo necesitas modificar la aplicación para que le pase a un proceso almacenado el "usuario". No el usuario de BBDD sino el usuario de la aplicación que se logeará contra una tabla de la BBDD.
Una vez le pasas ese usuario, lo guardas en el context_info de la sesion, y añades una columna a la tabla de esta aplicación que tenga el valor por defecto context_info.
El context_info pertenece a cada sesión, lo puedes leer de la vista de compatibilidad master.dbo.sysprocesses y se borra cuando el usuario abandona la sesion.
ohh muchas gracias amigo instale el vista en una particion de solo 25 gb (recomendacion de una pagina por ahi) y me quede sin espacio. esto me va de lujo.
Antes de intentar instalar el sp1, les recomiendo que hagan una copia de seguridad de todo el sisteema operativo; ¡por si algo falla!!
Si me funciona pero cuando quiero subir un Archivo pesado no me lo muestra
A que se debe
Oh, its great!
este script no sirve
Mi hermano te la comiste con el articulo jejeje.
No me aparece por nada del mundo la progress bar(el <div>)
Como mandas a llamar tu user control dentro del boton de cargar o como seria te lo agradeceria mucho si me pudieras ayudar
Cuando intenta actualizar me da error 565, alguien puede ayudarme? gracias
este trigger es para auditar tablas y quisiera felicitar al creador y a todos los que dan sus opiniones. mi enterrogante es como auditar la creacion de procedimientos almacenados.
Tengo una aplicacion en la cual cada usuario tiene un procedimiento almacenado que engloba todos sus derechos sobre la aplicacion. mi intencion es lograr llenar una tabla con los procedimientos almacenados disponibles para asignar a los usuarios, de esta manera los administradores del sistema (que no son informaticos), ya tendrian en una tabla cuales procedimientos se pueden asignar.
disculpen tanto blablabla.
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'SET'.
Msg 137, Level 15, State 1, Line 11
Must declare the variable '@TABLE_NAME'.
Msg 137, Level 15, State 2, Line 17
Must declare the variable '@TABLE_NAMEIS'.
Msg 137, Level 15, State 2, Line 19
Msg 137, Level 15, State 2, Line 22
Msg 137, Level 15, State 1, Line 117
Hola, El problema que yo tengo no es la presentación de una barra de progreso, mi problemas es que quiero cargar mas de un fichero, he creado una tabla y sobre esa tabla he colocado n FileUpload, cuando se hace un Posback se pieden los valores que hay, y no se como se guardan en la viewState.
Si lo sabes te agracedería que me lo dijeses.
jjimenezcf@gmail.com
Encontre un problema que cuando la clave principal es compuesta, por ejemplo id1+id2+id3, sale todo concatenado el nombre y luego los valos de dichos campos, estoy en busca de una solucion para separar los nombres de campos y valores por ";"
yo tengo un beta muy parecido me gustaria saver sobre ellos porque no tengo información. si me queres contar algo sobre ellos mandame un msj. a mi e-mail. es fede_chevrolet_10@hotmail.com.
gracias y muy lindo el beta.
chau bessos...
esta super cool el pecesito yo tengo 6 un blanco,dorado,azul,rosa,negro con rojo y otro amarillo con azul quisiera que me digan como se cruzan por que uno de mis peces es hembra y cada vez que los junto se pelean
Ay¡ pues esta super lindo el beta yo soy fanatica de estas pequeñas criaturas de DIOS que dios los bendiga atodos.Vayan con dios y la virgen
MIL GRACIAS
besitos
p.d.cuidenme a mis peces ok
NO LOS MALTRATEN CAPTAN.
bye
no se como hacerlo funcionar para todas las tablas de mibase de datos...
me podria acolaborar con esto gracias
oscar
no lo he podido a funcionar en todas las tablas como hago por favor
alguien puede subir una actualizacion del script que discrimine los campos "text, ntext, image"
Revizando el script me econtre con los siguientes errores
1. UserNamevarchar(128) es decir el tipo de dato esta pegado al nombre debe quedar asio UserName varchar(128).
2. WHILE @TABLE_NAMEIS NOT NULL, la palabra IS esta pegada a la variable @TABLE_NAME debe quedar asip WHILE @TABLE_NAME IS NOT NULL
Segui revizando y me encontre con este error lo cual no tengo idea que puede ser. Alguien que me colabore gracias.
19:45:56 [USE - 0 row(s), 0.000 secs] Command processed. No rows were affected
Code: 5701 SQL State: 01000 --- Cambiado el contexto de base de datos a 'bombas'.
19:45:56 [IF - 0 row(s), 0.000 secs] Command processed. No rows were affected
19:45:56 [DECLARE - 0 row(s), 0.000 secs] [Error Code: 170, SQL State: 37000] Línea 14: sintaxis incorrecta cerca de '='.
... 3 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 2 warnings, 1 errors]
Alguien que me ayude con este script pero sin errores
Gracias...
Server: Msg 173, Level 15, State 1, Line 28
The definition for column 'UserNamevarchar' must include a data type.
Server: Msg 156, Level 15, State 1, Line 6
Server: Msg 137, Level 15, State 1, Line 12
Server: Msg 137, Level 15, State 1, Line 24
Server: Msg 137, Level 15, State 1, Line 28
Server: Msg 137, Level 15, State 1, Line 34
Server: Msg 137, Level 15, State 1, Line 232
Perdon, soy nuevo en esto, pero los script los corro desde el Query Analyzer?
Encontré un problema después del campo 25 o 26 hay un desplazamiento y no he podido encontrar por que se da.
Corrijo algunos errores tipográficos del ejemplo:
USE ¡¡¡¡MYDATABASE!!!! --Ponerle el nombre de la base de datos que va hacer auditada
GO
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= 'Audit')
CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),
PrimaryKeyField varchar(1000),
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserName varchar(128)
)
DECLARE @sql varchar(8000), @TABLE_NAME sysname
SET NOCOUNT ON
SELECT @TABLE_NAME= MIN(TABLE_NAME)
FROM INFORMATION_SCHEMA.Tables
WHERE
TABLE_TYPE= 'BASE TABLE'
AND TABLE_NAME!= 'sysdiagrams'
AND TABLE_NAME!= 'Audit'
WHILE @TABLE_NAME IS NOT NULL
BEGIN
EXEC('IF OBJECT_ID (''' + @TABLE_NAME+ '_ChangeTracking'', ''TR'') IS NOT NULL DROP TRIGGER ' + @TABLE_NAME+ '_ChangeTracking')
SELECT @sql =
'
create trigger ' + @TABLE_NAME+ '_ChangeTracking on ' + @TABLE_NAME+ ' for insert, update, delete
as
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(128) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql varchar(2000),
@UpdateDate varchar(21) ,
@UserName varchar(128) ,
@Type char(1) ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000)
select @TableName = ''' + @TABLE_NAME+ '''
-- date and user
select @UserName = system_user ,
@UpdateDate = convert(varchar(8), getdate(), 112) + '' '' + convert(varchar(12), getdate(), 114)
-- Action
if exists (select * from inserted)
if exists (select * from deleted)
select @Type = ''U''
else
select @Type = ''I''
select @Type = ''D''
-- get list of columns
select * into #ins from inserted
select * into #del from deleted
-- Get primary key columns for full outer join
select @PKCols = coalesce(@PKCols + '' and'', '' on'') + '' i.'' + c.COLUMN_NAME + '' = d.'' + c.COLUMN_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = ''PRIMARY KEY''
and c.TABLE_NAME = pk.TABLE_NAME
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME
-- Get primary key fields select for insert
select @PKFieldSelect = coalesce(@PKFieldSelect+''+'','''') + '''''''' + COLUMN_NAME + ''''''''
select @PKValueSelect = coalesce(@PKValueSelect+''+'','''') + ''convert(varchar(100), coalesce(i.'' + COLUMN_NAME + '',d.'' + COLUMN_NAME + ''))''
if @PKCols is null
begin
raiserror(''no PK on table %s'', 16, -1, @TableName)
return
end
select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
select @bit = (@field - 1 )% 8 + 1
select @bit = power(2,@bit - 1)
select @char = ((@field - 1) / 8) + 1
if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @Type in (''I'',''D'')
select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field
select @sql = ''insert Audit (Type, TableName, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, UpdateDate, UserName)''
select @sql = @sql + '' select '''''' + @Type + ''''''''
select @sql = @sql + '','''''' + @TableName + ''''''''
select @sql = @sql + '','' + @PKFieldSelect
select @sql = @sql + '','' + @PKValueSelect
select @sql = @sql + '','''''' + @fieldname + ''''''''
select @sql = @sql + '',convert(varchar(1000),d.'' + @fieldname + '')''
select @sql = @sql + '',convert(varchar(1000),i.'' + @fieldname + '')''
select @sql = @sql + '','''''' + @UpdateDate + ''''''''
select @sql = @sql + '','''''' + @UserName + ''''''''
select @sql = @sql + '' from #ins i full outer join #del d''
select @sql = @sql + @PKCols
select @sql = @sql + '' where i.'' + @fieldname + '' <> d.'' + @fieldname
select @sql = @sql + '' or (i.'' + @fieldname + '' is null and d.'' + @fieldname + '' is not null)''
select @sql = @sql + '' or (i.'' + @fieldname + '' is not null and d.'' + @fieldname + '' is null)''
exec (@sql)
SELECT @sql
EXEC(@sql)
SELECT @TABLE_NAME= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_NAME> @TABLE_NAME
AND TABLE_TYPE= 'BASE TABLE'
END
Alguien tuvo problemas de este tipo
Msg 208, Level 16, State 1, Line 6
El nombre de objeto 'INFORMATION_SCHEMA.Tables' no es válido.
Ejecuto todo el script y ok, pero en la ultima parte me da este error:
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡me encaaaaaaaaaaaaantan los peces BETA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
no tienes los privilegios o tu version de sqlserver es distinta, 'INFORMATION_SCHEMA.Tables' yo lo he visto en sqlserver
Amigos estoy seguro que LINQ es bueno porfin se deja de lado lo desgastante de memoria al usar los dataset fue el error mas grande de microsoft pues esos tipos de datos solo sirben en el mundo de microsotf es necesario mantener los lenguajes como son si es POO debes manejar objetos y LINQ te da esa opcion y la coomparacion no es tan justa pues si se analiza el tiempo de LINQ se ve algo mas lento pero es porq al poner eso datos en memoria los cargo como objetos ya tienes soporte para acceso a esos datos con su definicion adecuado osea si es ID int o si los NOMbres son string ya esta con ese formato en coambio el Datareader es un lector "bobo" no sabe lo que lee ni lo adsorbe de la base asi que pues me quedo con LINQ.!
Deseo instalar el SP1 en Home Premium, pero me vota el mensaje de error 0x800F0823, segun foros que he visto dice que se debe a no tener instaladas algunas actualizaciones como la KB937287, instalo esta actualizacion desde windows update y dice instalalarla pero luego siempre pide nuevamente la instalacion como si nunca la instalara, la verdad me gustaria que me ayudaran a instalar este SP1, porque sin este es imposible instalar el SP2. GRACIAS.
Muchisimas gracias, justo estaba trabajando en un proyecto similar, asi que no reinventare la polvora..
:)
megustan los beta
Como hacer para correr el script en tabla que tiene campos text, ntext, o image..
me sale el sgte error:
Server: Msg 311, Level 16, State 1, Procedure dtproperties_ChangeTracking, Line 59
Cannot use text, ntext, or image columns in the 'inserted' and 'deleted' tables.
Server: Msg 311, Level 16, State 1, Procedure dtproperties_ChangeTracking, Line 61
muy buena aportacion amigo, gracias por compartir.
amigo ya probandolo esta muy bien en explorer pero en firefox parece que no funciona no se ve el progreso de carga
excelente!!! ESTE CODIGO ME CAYO ESPECTACULAR... no saben todo el trabajo que me ahorro.. y lo mejor es que es totalmente dinamico, no importa que luego agregue una nueva columna, ya automaticamente tambien la audita. genial.. genial.. genial.. !!!!
me envia un mensaje de error y es el siguiente
The query has exceeded the maximum number of result sets that can be displayed in the results grid. Only the first 100 result sets are displayed in the grid.
gracias espero puedan ayudarme
Hola, por más que intento probarlo no compila, da errores no podrían subir una proyecto ya compilado??? gracias
gente muy bueno y anda muy bien. pero queria saber si se puede modificar para que tome un usaurio logueado en una aplicacion de vb.net. ees para un trabajo de lafacu, y necesito auditar el usuario logueado y no el de la maquina.
Gracias; Muy buen trabajo con este SCRIPT
gracias me ahorro mucho trabajo el cres es excelente tu aporte me gustaria saber si tengo dos base de datos uno llamado SAS y el otro Auditoria y quiero enviar a AUDITORIA LOS CAMBIOS EN LAS tablas de produccion SAS que vario en el script gracias por tu tiempo
Seria bueno hacer un test pero con 300 millones de registros, creo que 10,000 no es mucho, actualmente donde trabajo contamos con esta cantidad de registros y los test ques estoy hacindo son lentos
Mucha, gracias, excelente
Por lo que he leido es muy bueno. Soy relativamente nueva en SQL que debo hacer para ponerlo en mi bd.
mejorando el script->
- Corregidos los errores del script
- agrupando algunas consultas para extraer datos:
USE MYDATABASE--Ponerle el nombre de la base de datos que va hacer auditada
select
@PKCols = coalesce(@PKCols + '' and'', '' on'') + '' i.'' + c.COLUMN_NAME + '' = d.'' + c.COLUMN_NAME,
@PKFieldSelect = coalesce(@PKFieldSelect+''+'','''') + '''''''' + COLUMN_NAME + '''''''',
@PKValueSelect = coalesce(@PKValueSelect+''+'','''') + ''convert(varchar(100), coalesce(i.'' + COLUMN_NAME + '',d.'' + COLUMN_NAME + ''))''
group by ORDINAL_POSITION,COLUMN_NAME
order by ORDINAL_POSITION desc
Este otro es para aquellos que necesitan que el registro de las auditorias este en una sola tupla. Es decir que todos los campos afectados por alguna de las operaciones (insert, update, delete) estarán concatenados y separados por '|'
FieldName varchar(1000),
OldValue varchar(2000),
NewValue varchar(2000),
EXEC('IF OBJECT_ID (''TR_AUDIT_' + @TABLE_NAME + ''', ''TR'') IS NOT NULL DROP TRIGGER TR_AUDIT_' + @TABLE_NAME+ '')
create trigger TR_AUDIT_' + @TABLE_NAME + ' on ' + @TABLE_NAME+ ' for insert, update, delete
@fieldname varchar(64) ,
@sql varchar(8000),
@PKValueSelect varchar(1000),
@fieldsNames varchar(1000) ,
@ValuesOld varchar(2000),
@ValuesNew varchar(2000)
@PKFieldSelect = coalesce(@PKFieldSelect+''+''''|''''+'','''') + '''''''' + COLUMN_NAME + '''''''',
@PKValueSelect = coalesce(@PKValueSelect+''+''''|''''+'','''') + ''convert(varchar(1000), coalesce(i.'' + COLUMN_NAME + '',d.'' + COLUMN_NAME + ''))''
select @field = min(ORDINAL_POSITION),@fieldname = COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @TableName and ORDINAL_POSITION > @field
@fieldsNames = coalesce(@fieldsNames +''+''''|''''+'','''', '''') + '''''''' + COLUMN_NAME + '''''''',
@ValuesOld = coalesce(@ValuesOld +''+''''|''''+'','''', '''') + ''convert(varchar(2000), coalesce(d.'' + c.COLUMN_NAME + '',''''''''))'',
@ValuesNew = coalesce(@ValuesNew +''+''''|''''+'','''', '''') + ''convert(varchar(2000), coalesce(i.'' + c.COLUMN_NAME + '',''''''''))''
from
INFORMATION_SCHEMA.COLUMNS c
where c.TABLE_NAME = @TableName
and c.COLUMN_NAME=@fieldname
select @sql = @sql + '','' + @fieldsNames
select @sql = @sql + '','' + @ValuesOld
select @sql = @sql + '','' + @ValuesNew
select @sql = @sql + '' from #ins i full outer join #del d ''
Muy bien... pero una duda... no estástomando en cuenta el tamaño del archivo o lo que falta del mismo vdd? o sea no estás haciendo una comparación del tamaño del archivo, los bytes que se han cargado y los bytes que faltan... esto sólo estaría "simulando" el progreso mediante los setInterval de JS... :(
Muchas graias por el tutorial
una pregunta de principiante
podrias dar el orden de los archivos
o si podrias suvier todo el ejemplo en un archivo comprimido
lo que hice fue
en este archivo puse todos los imports y codijo vb
Uploader.ascx.vb
pero en el siguiente no se que codigo se pone
Default.aspx.VB
de antemano muchas gracias
Bueeeeeeeeeeenisimo el articulo!! Felicidades!! me ayudo en serio!! =d
como capturo el ip del cliente
Excelente aporte, yo modifique un poco el trigger para que funcione para n capas, pero se basa en que cualquier tabla del sistema tenga un campo aud_usuario, para que este decienda desde la capa web hasta el trigger de la base de datos, En cuanto al ultimo post de Alexander Cuellar Jimenez en que dice para que salga concatenado me parece chevere, pero hay un detalle que modificar si actualizas tres campos se hace tres inserts en la base la tabla de audit, y bastaría con uno pues los campos y valores ya estan concatenados
muy bueno felicitaciones ......
Quería darle las gracias por leer esta genial! Yo positivamente divertirse con cada poco de que le he agregado un marcador a echar un vistazo a lo nuevo que presentar
Hola buenas noches,
Yo quisiera saber como puedo cambiar
@UserName = system_user
por el usuario que inicio sesion que no esta logueado a nivel de base de datos, sino que esta almacenado en una tabla usuario.
Saludos.