Foro Oficial de C#



Ya lo habia leido, pero como hago para corregir esto, o mejor dicho, agregarlo:

Simplemente estamos tomando los valores originales de CreateParams los cuales incluyen una ventana con bordes, pero reasignamos la propiedad Style para dejarla como estaba pero quitándole el borde de Resize y la barra de titulo.

Que es realmente lo que me interesa.

Edit:

Adivinando quite uno de los prarametros y quedo funcionando :D

quedo asi:

Para que quede como guia para el futuro y en google :p


Como hacer un formulario redimensionable (sizeabe), simplemente sobreescriba el metodo CreateParams dejandolo como se ve a continuacion:

Nota: Esto se pone en la misma clase del Form.
PHP:
 protected override CreateParams CreateParams
        {
            get
            {
                CreateParams p = base.CreateParams;
                p.Style &= ~(0xC00000);
                return p;
            }
        }


No lo quiero poner como PD, pero por que quedan tan gruesos los bordes?:rolleyes: Si de algo sirve he usado un tipo de formulario Sizeable.



Tnx & SuerteX :)
 
No lo quiero poner como PD, pero por que quedan tan gruesos los bordes?:rolleyes: Si de algo sirve he usado un tipo de formulario Sizeable.

Si, el tema es que como lo haces te toca con el borde de windows... es decir el borde tiene la funcionalidad del tamaño..
para evitar eso mira abajo:

olvidate de todo lo del post anterior.
Deja tu form sin borde desde el designer y luego adiciona este código que he desarrollado para ti.

PHP:
        Rectangle sizeGripRectangle;
        bool inSizeDrag = false;
        const int GRIP_SIZE = 15;
        private void SetGripRectangle()
        {
            sizeGripRectangle = new Rectangle(
                       this.Width - GRIP_SIZE,
                       this.Height - GRIP_SIZE, GRIP_SIZE, GRIP_SIZE);
        }


        private bool IsInSizeGrip(Point tmp)
        {
            if (tmp.X >= sizeGripRectangle.X
              && tmp.X <= this.Width
              && tmp.Y >= sizeGripRectangle.Y
              && tmp.Y <= this.Height
                )
                return true;
            else
                return false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SetGripRectangle();
            this.Paint += (o, ea) => { ControlPaint.DrawSizeGrip(ea.Graphics, this.BackColor, sizeGripRectangle); };

            this.MouseUp += delegate { inSizeDrag = false; };
            this.MouseDown += (o, ea) =>
                                {
                                    if (IsInSizeGrip(ea.Location))
                                        inSizeDrag = true;
                                };
            this.MouseMove += (o, ea) =>
                                {
                                    if (inSizeDrag)
                                    {
                                        this.Width = ea.Location.X + GRIP_SIZE / 2;
                                        this.Height = ea.Location.Y + GRIP_SIZE / 2;
                                        SetGripRectangle();
                                        this.Invalidate();
                                    }
                                };
        }

Esta tan chevere que hare un articulo en mi blog al respecto.
 
  • Me gusta
Reacciones: 2 personas
Si, el tema es que como lo haces te toca con el borde de windows... es decir el borde tiene la funcionalidad del tamaño..
para evitar eso mira abajo:

olvidate de todo lo del post anterior.
Deja tu form sin borde desde el designer y luego adiciona este código que he desarrollado para ti.

PHP:
        Rectangle sizeGripRectangle;
        bool inSizeDrag = false;
        const int GRIP_SIZE = 15;
        private void SetGripRectangle()
        {
            sizeGripRectangle = new Rectangle(
                       this.Width - GRIP_SIZE,
                       this.Height - GRIP_SIZE, GRIP_SIZE, GRIP_SIZE);
        }


        private bool IsInSizeGrip(Point tmp)
        {
            if (tmp.X >= sizeGripRectangle.X
              && tmp.X <= this.Width
              && tmp.Y >= sizeGripRectangle.Y
              && tmp.Y <= this.Height
                )
                return true;
            else
                return false;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SetGripRectangle();
            this.Paint += (o, ea) => { ControlPaint.DrawSizeGrip(ea.Graphics, this.BackColor, sizeGripRectangle); };

            this.MouseUp += delegate { inSizeDrag = false; };
            this.MouseDown += (o, ea) =>
                                {
                                    if (IsInSizeGrip(ea.Location))
                                        inSizeDrag = true;
                                };
            this.MouseMove += (o, ea) =>
                                {
                                    if (inSizeDrag)
                                    {
                                        this.Width = ea.Location.X + GRIP_SIZE / 2;
                                        this.Height = ea.Location.Y + GRIP_SIZE / 2;
                                        SetGripRectangle();
                                        this.Invalidate();
                                    }
                                };
        }

Esta tan chevere que hare un articulo en mi blog al respecto.



Excelente :D.... eso de los comportamientos de los form me gusto ;).

No se si recuerda lo del datagridview desplegable... esta vez lo hice muuuuucho mas sencillo, mucho menos codigo e igual o mejor de funcional.

DataGridView desplegable

Pa' el morbo, se trata de esto :p:

Una vez lo que cuando aprendia .Net en VB.

attachment.php



Ya lo tengo listo para un proyecto que tengo en mente desarrollar completo, y creo que ahora si me tendran por aqui mucho... :p ya que estoy muuucho mas libre de la U para dedicarme a aprender mucho mas de C# a ver si por fin doy con un empleito de Developer :p.



Gracias a JuanK, siempre servicial ;)



SuerteX :)
 

Archivos adjuntos

  • frm.jpg
    frm.jpg
    18.4 KB · Visitas: 407
buenas, me pueden por fa colaborar con lo siguiente :nervios:

tengo el tipico problema de

ORA-12154: TNS:no se ha podido resolver el identificador de conexión especificado



en SQL se conecta sin ningún problema:



hice un ping al listener y funciona correctamente:



y el tnsnames.ora lo tengo asi:

Código:
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = Manuel-PC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

historia =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = Manuel-PC)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = historia)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  )


hay algo que me falte? gracias ;)
 
eso es porque el cliente Oracle del que te conectas desde .net no es elmismo cliente oracle que manejas desde afuera...
instala el ODP de oracle para la version de DB que tienes y desde donde se instale ese cliente configuras el tnsmaes que le corresponda...

otra opcion menos trabajosa es utilizar un conection string de este formato:

PHP:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;
 
Uyyy... man, espero que no sea el proyecto que va para produccion, si no proteja mejor esa app, ya que ahi le da todos los datos a cualquier man que le quiera sabotear la appl :S.



SuerteX :)
 
Emmm... molestando de nuevo por aqui.


Una pregunta... no se si es n00b, ya que tengo rato dandole cabeza y nada de encontrarle solución :(.


A ver, tengo un form como el que mostre arriba, pero deseo usarlo varias veces, asi solo lo instancion una vez, pero quiero que dependiendo del combobox que lo llame utilice una funcion diferente, ya que en cada combobox que lo utilice llenare el grid con informacion diferente. Alguna sugerencia?

Adjunto la aplicacion para mayor clarificacion...

Ejemplo: Tengo el Datagridview desplegable en dos combobox, pero en cada uno quiero hacer una consulta diferente, de hecho las funciones estan listas.


PD: Esta todo de esa forma porque es un ejemplo, ya que estoy practicando como pasarlo a n-tier o n-layers :p


SuerteX :)
 

Archivos adjuntos

  • Northwind.zip
    95 KB · Visitas: 85
A ver, tengo un form como el que mostre arriba, pero deseo usarlo varias veces, asi solo lo instancion una vez, pero quiero que dependiendo del combobox que lo llame utilice una funcion diferente, ya que en cada combobox que lo utilice llenare el grid con informacion diferente. Alguna sugerencia?
si, utiliza un delegado como parametro a la hora de mostrarlo con eso el form hace lo que tenga que hacer, y la parte del algoritmo que cambia la recibe como parametro.
 
eso es porque el cliente Oracle del que te conectas desde .net no es elmismo cliente oracle que manejas desde afuera...
instala el ODP de oracle para la version de DB que tienes y desde donde se instale ese cliente configuras el tnsmaes que le corresponda...

muchas gracias, efectivamente eso era, estaba trabajando con un ODAC que servia para las versiones express, y ahora ya tengo la version completa, actualicé y pegue dentro de este el tnsnames.ora y ya funciono:)

Uyyy... man, espero que no sea el proyecto que va para produccion, si no proteja mejor esa app, ya que ahi le da todos los datos a cualquier man que le quiera sabotear la appl :S.

SuerteX :)

no, no es para producción, es una pequeña aplicación que estoy desarrollando para mi ;)
 
si, utiliza un delegado como parametro a la hora de mostrarlo con eso el form hace lo que tenga que hacer, y la parte del algoritmo que cambia la recibe como parametro.

yo en cambio utilizaría propiedades, en tu form que tiene el gridview declaro una propiedad que se llame datos....consulta......o variable, en esta propiedad en el metodo set, pongo la logica para calcular de nuevo los datos de la grilla.
en el form principal, lo que hago es que en el selectedvalue del combobox, le cambio el valor a la propiedad. con eso obtengo el efecto que tu quieres.
 
yo en cambio utilizaría propiedades, en tu form que tiene el gridview declaro una propiedad que se llame datos....consulta......o variable, en esta propiedad en el metodo set, pongo la logica para calcular de nuevo los datos de la grilla.
en el form principal, lo que hago es que en el selectedvalue del combobox, le cambio el valor a la propiedad. con eso obtengo el efecto que tu quieres.

Buena idea, pero como dice juank creo que funciona mejor, ya que ahí en el delegado puedo agregarle el combobox del cual se despliega y el método que usare, independientemente de donde este, solo mandaría una referencia... De todas maneras gracias a ambos.... Los mantendré altanto y los molestare con dudas :p..



SuerteX :)
Escrito desde www.LANeros.mobi (Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_2 like Mac OS X; es-es) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A400 Safari/6531.22.7)
 
Alguien me explica porque el Like funciona asi:

PHP:
public DataSet SelectCustomers(string arg)
        {
            try
            {
                    ds.Clear();
                    cmd = new SqlCommand("SELECT CustomerID as \"Customer ID \", CompanyName as \" Company Name\", Address FROM dbo.Customers  WHERE CompanyName like %@CompanyName%", cnn);         
                
                da = new SqlDataAdapter(cmd);
                da.Fill(ds, "Customers");                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error when you query customers. Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
            finally
            {
                cmd.Connection.Close();
            }

            return ds;        
        }

Pero no asi.

PHP:
 cmd = new SqlCommand("SELECT CustomerID, CompanyName, Address FROM dbo.Customers  WHERE CompanyName LIKE '%@CompanyName%'", cnn);
                cmd.Parameters.AddWithValue("@CompanyName", arg);


SuerteX :)
 
Alguien me explica porque el Like no funciona asi:

PHP:
public DataSet SelectCustomers(string arg)
        {
            try
            {
                    ds.Clear();
                    cmd = new SqlCommand("SELECT CustomerID as \"Customer ID \", CompanyName as \" Company Name\", Address FROM dbo.Customers  WHERE CompanyName like %@CompanyName%", cnn);     
             
                cmd.Parameters.AddWithValue("@CompanyName", arg);                
                
                da = new SqlDataAdapter(cmd);
                da.Fill(ds, "Customers");                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error when you query customers. Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
            finally
            {
                cmd.Connection.Close();
            }

            return ds;        
        }

Pero asi, si.

PHP:
 cmd = new SqlCommand("SELECT CustomerID, CompanyName, Address FROM dbo.Customers  WHERE CompanyName LIKE '%" + arg + "%'", cnn);
                cmd.CommandType = CommandType.Text;


SuerteX :)


porque en ORacle LIKE se usa para comparar cadenas, y las cadenas deben ir en comillas sencillas...
dentro de las comillas puedes utilizar comodines como el % para representar 'cualquier cosa' antes y/o despues de la cadena...

ejemplo

PHP:
SELECT *
  FROM cat
 WHERE table_name LIKE 'SYS%'

para buscar todas las tablas visibles para el usuario y que comiencen por SYS
 
Alguien me explica porque el Like funciona asi:

PHP:
public DataSet SelectCustomers(string arg)
        {
            try
            {
                    ds.Clear();
                    cmd = new SqlCommand("SELECT CustomerID as \"Customer ID \", CompanyName as \" Company Name\", Address FROM dbo.Customers  WHERE CompanyName like %@CompanyName%", cnn);         
                
                da = new SqlDataAdapter(cmd);
                da.Fill(ds, "Customers");                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error when you query customers. Error:" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
            finally
            {
                cmd.Connection.Close();
            }

            return ds;        
        }

Pero no asi.

PHP:
 cmd = new SqlCommand("SELECT CustomerID, CompanyName, Address FROM dbo.Customers  WHERE CompanyName LIKE '%@CompanyName%'", cnn);
                cmd.Parameters.AddWithValue("@CompanyName", arg);


SuerteX :)

Yo le recomendaria mi hermano que usara Stored Procedures en vez de usar el query directamente, deje que todo se lo haga la base de datos, complementando la explicacion de Juank_Solocodigo, aunque tambien hay otros esenarios que hay que analizar, este link le puede ayudar un poco mas a comprender cuando hay que usar SP, Funciones o Vistas:

http://databases.aspfaq.com/databas...red-procedure-or-a-user-defined-function.html
 
Yo le recomendaria mi hermano que usara Stored Procedures en vez de usar el query directamente, deje que todo se lo haga la base de datos, complementando la explicacion de Juank_Solocodigo, aunque tambien hay otros esenarios que hay que analizar, este link le puede ayudar un poco mas a comprender cuando hay que usar SP, Funciones o Vistas:

http://databases.aspfaq.com/databas...red-procedure-or-a-user-defined-function.html

Si los se utilizar, solo que haciendo esta prueba me di cuenta que no es posible usar un like y me quedo la duda :S


porque en ORacle LIKE se usa para comparar cadenas, y las cadenas deben ir en comillas sencillas...
dentro de las comillas puedes utilizar comodines como el % para representar 'cualquier cosa' antes y/o despues de la cadena...

ejemplo

PHP:
SELECT *
  FROM cat
 WHERE table_name LIKE 'SYS%'

para buscar todas las tablas visibles para el usuario y que comiencen por SYS

Se me olvido decir que lo trate asi y tampoco...

PHP:
cmd = new SqlCommand("SELECT CustomerID as \"Customer ID \", CompanyName as \" Company Name\", Address FROM dbo.Customers  WHERE CompanyName like '%@CompanyName%'", cnn);  
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@CompanyName", arg);




SuerteX :)
 
C# – El extraño caso de la ventana sin borde que no se deja cambiar de tamaño

Esta es una copia del artículo original publicado en mi blog,

el artículo original con código y texto completemante formateado se puede ver en:

C# - El extraño caso de la ventana sin borde que no se deja cambiar de tamaño
------------------------------------------------------------------------------------------------------------------

Cómo hacer una ventana sin borde que se deje redimensionar

Hola,
tal vez este titulo les parezca repetido, pero no es así. Quiero traer a colación uno de mis artículos más populares en la web:
C# – El extraño caso de la ventana sin borde que no se deja maximizar ni minimizar

Bien, en el continuo devenir de mi hobbie, que es programar, tuve la oportunidad de ayudarle a un amigo, más conocido como VIRUTERO_5 quien en dado momento estaba trabajando con una ventana sin borde, con tan mala suerte que necesitaba que esta ventana se dejara redimensionar por el usuario, pero como ustedes podrán adivinar… no es posible hacer esto por si solo.

Así que estuve revisando el tema por un rato y llegue a dos soluciones, una de ellas rápida con resultados ‘modestos’ y otra un poco más demorada pero con resultados mucho más profesionales.

A continuación expondré las dos soluciones, y como siempre, tratando que la funcionalidad sea muy entendible para todos aunque es claro que ya en sus labores podrán organizarla mucho mejor.

Para hacer este ejercicio lo primero es crear un proyecto de Windows Forms, utilizaremos la forma creada por defecto para hacer lo demás.

Método 1, rápido y resultados modestos


Dejamos el Form tal y como queda creado por defecto.
Una vez más debemos sobrescribir la propiedad CreateParams, allí cambiaremos el estilo inicial de la forma dejándolo tal como esta pero quitándole el atributo WS_CAPTION, que básicamente es la barra de título.
PHP:
const int WS_CAPTION = 0xC00000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams p = base.CreateParams;
        p.Style &= ~WS_CAPTION;
        return p;
    }
}

Eso es todo, el resultado es una ventana a la que se le puede cambiar el tamaño, aunque no es del todo una ventana sin borde.


La solución más fácil y obvia es “quitemos el borde” esto lo podemos hacer quitando además de WS_CAPTION a WS_THICKFRAME tal y como lo mostré en el artículo C# – El extraño caso de la ventana sin borde que no se deja maximizar ni minimizar, pero el problema es que precisamente WS_THICKFRAME es el que le da al Form la funcionalidad de cambiar el tamaño. Así que hasta aquí llega el método 1.

Método 2, demorado pero con resultados más profesionales

Esta vez, desde el diseñador, dejamos el Form sin borde.


Hacer que el Form luzca como un objeto que se deja cambiar de tamaño

Lo primero que debemos hacer es que el Form luzca como un objeto que se deja cambiar de tamaño, puesto que sino tiene borde hay que buscar una forma de que el usuario se de por enterado de que SI puede cambiarle el tamaño.

Para poder dibujar el SizeGrip debemos determinar su tamaño, para mi gusto 15px es perfecto, y debemos dibujarlo en la ubicación tradicional que es en la parte inferior derecha del Form.
Es importante tener en cuenta que si el usuario cambia el tamaño del Form la ubicación relativa del SizeGrip cambiará también ya que debe ajustarse a las nuevas dimensiones así que creamos un método capaz de establecer el Rectangle donde se dibujara el SizeGrip de acuerdo al tamaño del Form.
PHP:
Rectangle sizeGripRectangle;
const int GRIP_SIZE = 15;
 
private void AdaptGripRectangle()
{
    sizeGripRectangle.X = this.Width - GRIP_SIZE;
    sizeGripRectangle.Y = this.Height - GRIP_SIZE;
}
 
public Form1()
{
    InitializeComponent();
 
    sizeGripRectangle.Width = sizeGripRectangle.Height = GRIP_SIZE;
    AdaptGripRectangle();
}

Como ya tenemos definido del tamaño y la ubicación del SizeGrip modificaremos el evento Paint para dibujarlo. Utilizaré la notación lambda por que me gusta más, no se confundan, es lo mismo que utilizar un delegado o los eventhandler tradicionales.

PHP:
public Form1()
{
    InitializeComponent();
 
    sizeGripRectangle.Width = sizeGripRectangle.Height = GRIP_SIZE;
    AdaptGripRectangle();
 
    this.Paint += (o, ea) => { ControlPaint.DrawSizeGrip(ea.Graphics, 
                                this.BackColor, 
                                sizeGripRectangle); };
}

La clase ControlPaint incorpora varios métodos útiles, uno de ellos es precisamente DrawSizeGrip que hace el dibujo que necesitamos. Para ello le pasamos como Color el BackColor de la forma actual, para que se vea más natural, y desde luego el Rectangle que define el SizeGrip
Ejecutamos nuestra Form y se ve así:


Hacer que el SizeGrip sirva para algo

Todo va muy bonito, muy simpático pero completamente inútil. El SizeGrip hasta el momento no es nada más que un adorno pero no sirve para nada. Hay que hacer que funcione.
Antes que nada necesitamos un método que nos diga si un punto dado, por ejemplo la ubicación del mouse, esta encima del SizeGrip esto es fácil de hacer:
PHP:
private bool IsInSizeGrip(Point tmp)
{
    if (tmp.X >= sizeGripRectangle.X
        && tmp.X <= this.Width
        && tmp.Y >= sizeGripRectangle.Y
        && tmp.Y <= this.Height
        )
        return true;
    else
        return false;
}

Una vez hecho esto, hay que detectar cuando el mouse hace clic sobre el SizeGrip. Para ello creamos una variable boolean llamada inSizeDrag y la modificaremos con los eventos MouseDown y MouseUp, de tal forma que si el usuario deja presionado el botón del mouse justo sobre el SizeGrip ponemos la variable en true, y una vez levante el botón del mouse ponemos la variable en false.
PHP:
//declaramos esta variable en la clase
bool inSizeDrag = false;
//...
//...
 
//Adicionamos este codigo en el constructor
//justo despues de donde hicimos lo del evento Paint
this.MouseUp += delegate { inSizeDrag = false; };
this.MouseDown += (o, ea) =>
                    {
                        if (IsInSizeGrip(ea.Location))
                            inSizeDrag = true;
                    };

Gracias a esto ya podemos detectar cuando el usuario quiere cambiar el el tamaño del Form, así que solo basta con modificar el evento MouseMove, allí detectamos si se pretende cambiar el tamaño del Form y si es así entonces procedemos a cambiarle el tamaño de acuerdo a las coordenadas del mouse.
A las coordenadas del mouse les he adicionado la mitad del tamaño del SizeGrip para producir un efecto más natural.
PHP:
//La mitad del tamaño del SizeGrip
//se declara en al clase
const int GRIP_SIZE_OVER_TWO = GRIP_SIZE / 2;
//...
//..
 
//esto lo colocamos justo despues de donde 
//hemos colocado todo el código anterior
this.MouseMove += (o, ea) =>
            {
                if (inSizeDrag)
                {
                    this.Width = ea.Location.X + GRIP_SIZE_OVER_TWO;
                    this.Height = ea.Location.Y + GRIP_SIZE_OVER_TWO;
                    AdaptGripRectangle();
                    this.Invalidate();
                }
            };

Eso es todo, pueden ver la aplicación y el ejemplo completo disponible para descarga al final del artículo en mi blog.

Ventana Sin Borde pero Resizable.

byte!
.
 
Si los se utilizar, solo que haciendo esta prueba me di cuenta que no es posible usar un like y me quedo la duda :S




Se me olvido decir que lo trate asi y tampoco...

PHP:
cmd = new SqlCommand("SELECT CustomerID as \"Customer ID \", CompanyName as \" Company Name\", Address FROM dbo.Customers  WHERE CompanyName like '%@CompanyName%'", cnn);  
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@CompanyName", arg);




SuerteX :)
desde mi punto de vista, y no es que sea un experto, jejejeje.....
quitale las comillas simplex, para eso esta el parametro con valor que estas agregando. los parametros con valores no se reemplazan directamente en la consulta sql, como su nombre lo indica es un parametro....

Ademas el alias debe ir en comillas sencillas

si nos ponemos a ver que recibe la base de datos con lo que tu estas haciendo vemos esto
SELECT CustomerID as , CompanyName as " Company Name", Address FROM dbo.Customers WHERE CompanyName like '%@CompanyName%'"

lo ve asi, textualmente.....

Pero en cambio si hacemos esto

SELECT CustomerID as 'Customer ID ', CompanyName as 'Company Name', Address FROM dbo.Customers WHERE CompanyName like %@CompanyName%

lo que base de datos te va a hacer es preguntar por tu consulta que concuerde con tu criterio asi:

SELECT CustomerID as 'Customer ID ', CompanyName as 'Company Name', Address FROM dbo.Customers WHERE CompanyName like %el valor del @CompanyName%
 
desde mi punto de vista, y no es que sea un experto, jejejeje.....
quitale las comillas simplex, para eso esta el parametro con valor que estas agregando. los parametros con valores no se reemplazan directamente en la consulta sql, como su nombre lo indica es un parametro....

Ademas el alias debe ir en comillas sencillas

si nos ponemos a ver que recibe la base de datos con lo que tu estas haciendo vemos esto
SELECT CustomerID as , CompanyName as " Company Name", Address FROM dbo.Customers WHERE CompanyName like '%@CompanyName%'"

lo ve asi, textualmente.....

Pero en cambio si hacemos esto

SELECT CustomerID as 'Customer ID ', CompanyName as 'Company Name', Address FROM dbo.Customers WHERE CompanyName like %@CompanyName%

lo que base de datos te va a hacer es preguntar por tu consulta que concuerde con tu criterio asi:

SELECT CustomerID as 'Customer ID ', CompanyName as 'Company Name', Address FROM dbo.Customers WHERE CompanyName like %el valor del @CompanyName%

Lo pruebo y le comento... por cierto, lo que hice con los delegados me emociono bastante :D... luego muestro el progreso :D


PD: El post de Juank es lectura obligada ;)


SuerteX :)