TABELA COMO PARAMETRO EM C#

ROGERIOAZEVEDO 30/08/2012 17:35:08
#408966
Boa tarde.

Estou fazendo uma aplicação, e gostaria de colocar um parametro para trocar o banco de dados a partir de uma combobox. Não sei onde estou errando, a aplicação retorna o seguinte erro:

Erro : Must declare the table variable [Ô]@From1[Ô].


SqlCommand cmd = new SqlCommand([Ô]SELECT CASE MONTH(Data)[Ô]
+ [Ô] WHEN [ô]01[ô] THEN [ô]JAN[ô][Ô]
+ [Ô] WHEN [ô]02[ô] THEN [ô]FEV[ô][Ô]
+ [Ô] WHEN [ô]03[ô] THEN [ô]MAR[ô][Ô]
+ [Ô] WHEN [ô]04[ô] THEN [ô]ABR[ô][Ô]
+ [Ô] WHEN [ô]05[ô] THEN [ô]MAI[ô][Ô]
+ [Ô] WHEN [ô]06[ô] THEN [ô]JUN[ô][Ô]
+ [Ô] WHEN [ô]07[ô] THEN [ô]JUL[ô][Ô]
+ [Ô] WHEN [ô]08[ô] THEN [ô]AGO[ô][Ô]
+ [Ô] WHEN [ô]09[ô] THEN [ô]SET[ô][Ô]
+ [Ô] WHEN [ô]10[ô] THEN [ô]OUT[ô][Ô]
+ [Ô] WHEN [ô]11[ô] THEN [ô]NOV[ô][Ô]
+ [Ô] WHEN [ô]12[ô] THEN [ô]DEZ[ô][Ô]
+ [Ô] END AS Mes, SUM(Vendas) AS Vendas[Ô]
+ [Ô] FROM @From1[Ô]
+ [Ô] WHERE Data BETWEEN @data3 AND @data4[Ô]
+ [Ô] GROUP BY DATENAME(MONTH,Data), YEAR(Data), MONTH(Data), Filial[Ô]
+ [Ô] ORDER BY YEAR(Data), MONTH(Data)[Ô], conn);


//Cria um DataAdapter a partir do comando
SqlDataAdapter da = new SqlDataAdapter(cmd);


//Cria Parametros para substituir na Querry
cmd.Parameters.Add([Ô]@data3[Ô], SqlDbType.Date);
cmd.Parameters[[Ô]@data3[Ô]].Value = this.dtpUni1.Value.Date;
cmd.Parameters.Add([Ô]@data4[Ô], SqlDbType.Date);
cmd.Parameters[[Ô]@data4[Ô]].Value = this.dtpUni2.Value.Date;
cmd.Parameters.Add([Ô]@From1[Ô], SqlDbType.VarChar, 50);
cmd.Parameters[[Ô]@From1[Ô]].Value = cbxUnidade.SelectedIndex;


switch (cbxUnidade.SelectedIndex)
{

case 0:
cmd.Parameters[[Ô]@From1[Ô]].Value = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_BA[Ô];
break;

case 1:
cmd.Parameters[[Ô]@From1[Ô]].Value = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_CE[Ô];
break;

case 2:
cmd.Parameters[[Ô]@From1[Ô]].Value = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_DF[Ô];
break;

case 3:
cmd.Parameters[[Ô]@From1[Ô]].Value = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_GO[Ô];
break;

}

KERPLUNK 30/08/2012 17:44:41
#408967
Você não pode fazer isso. A parametrização é para parâmetros mesmo, não para uma tabela.
ROGERIOAZEVEDO 30/08/2012 17:47:06
#408968
Então não é possivel eu fazer uma troca de tabela dinamica?

Se realmente não tiver jeito, eu faço varios UNION e uso outro filtro como parametro.

E não tem jeito de declarar variavel no SQL?
KERPLUNK 30/08/2012 17:58:18
#408969
Veja bem, adicionar parâmetros no comando, não significa que os valores do parâmetros simplesmente substituirão as variáveis, não é assim que funciona. Existe uma sintaxe básica para cada comando sql, que deve ser respeitada. Os valores que o comando SQL vai conter, esses sim, vão receber os parâmetros que você adiciona no comando. [Ô]From Tabela[Ô], não é um parâmetro é uma cláusula SQL e deve ser respeitada. Para esse caso, você poderia simplesmente fazer um replace:

string SQL = string.Format([Ô]SELECT CASE MONTH(Data)[Ô]
+ [Ô] WHEN [ô]01[ô] THEN [ô]JAN[ô][Ô]
+ [Ô] WHEN [ô]02[ô] THEN [ô]FEV[ô][Ô]
+ [Ô] WHEN [ô]03[ô] THEN [ô]MAR[ô][Ô]
+ [Ô] WHEN [ô]04[ô] THEN [ô]ABR[ô][Ô]
+ [Ô] WHEN [ô]05[ô] THEN [ô]MAI[ô][Ô]
+ [Ô] WHEN [ô]06[ô] THEN [ô]JUN[ô][Ô]
+ [Ô] WHEN [ô]07[ô] THEN [ô]JUL[ô][Ô]
+ [Ô] WHEN [ô]08[ô] THEN [ô]AGO[ô][Ô]
+ [Ô] WHEN [ô]09[ô] THEN [ô]SET[ô][Ô]
+ [Ô] WHEN [ô]10[ô] THEN [ô]OUT[ô][Ô]
+ [Ô] WHEN [ô]11[ô] THEN [ô]NOV[ô][Ô]
+ [Ô] WHEN [ô]12[ô] THEN [ô]DEZ[ô][Ô]
+ [Ô] END AS Mes, SUM(Vendas) AS Vendas[Ô]
+ [Ô] FROM [txt-color=#e80000]{0}[/txt-color][Ô]
+ [Ô] WHERE Data BETWEEN @data3 AND @data4[Ô]
+ [Ô] GROUP BY DATENAME(MONTH,Data), YEAR(Data), MONTH(Data), Filial[Ô]
+ [Ô] ORDER BY YEAR(Data), MONTH(Data)[Ô], [txt-color=#e80000]cbxUnidade.SelectedIndex[/txt-color]);

SqlCommand cmd = new SqlCommand(SQL, conn);
ROGERIOAZEVEDO 30/08/2012 19:24:53
#408973
e como ficaria a sintaxe do switch (cbxUnidade.SelectedIndex)

tentei aqui mas ta dando erro

---------------------------

---------------------------
Erro : Incorrect syntax near [ô]-[ô].
---------------------------
OK
---------------------------

ROGERIOAZEVEDO 31/08/2012 10:21:19
#408990
Achei uma solução um amigo me deu uma mão criei outra classe.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
//CLASSE PUBLICA DE VARIÁVEIS PARA UTILIZAR EM TODO SOFTWARE
public class Variaveis
{
public static string banco = qry + ba + clausula;

public const string ba = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_BA[Ô];

public const string ce = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_CE[Ô];

public const string df = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_DF[Ô];

public const string go = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_GO[Ô];

public const string mg = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_MG[Ô];

public const string mt = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_MT[Ô];

public const string pe = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_PE[Ô];

public const string rj = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_RJ[Ô];

public const string sp = [Ô]PAINEL_GERENCIAL.dbo.Pedidos_SP[Ô];


public const string qry = [Ô]SELECT CASE MONTH(Data)[Ô]
+ [Ô] WHEN [ô]01[ô] THEN [ô]JAN[ô][Ô]
+ [Ô] WHEN [ô]02[ô] THEN [ô]FEV[ô][Ô]
+ [Ô] WHEN [ô]03[ô] THEN [ô]MAR[ô][Ô]
+ [Ô] WHEN [ô]04[ô] THEN [ô]ABR[ô][Ô]
+ [Ô] WHEN [ô]05[ô] THEN [ô]MAI[ô][Ô]
+ [Ô] WHEN [ô]06[ô] THEN [ô]JUN[ô][Ô]
+ [Ô] WHEN [ô]07[ô] THEN [ô]JUL[ô][Ô]
+ [Ô] WHEN [ô]08[ô] THEN [ô]AGO[ô][Ô]
+ [Ô] WHEN [ô]09[ô] THEN [ô]SET[ô][Ô]
+ [Ô] WHEN [ô]10[ô] THEN [ô]OUT[ô][Ô]
+ [Ô] WHEN [ô]11[ô] THEN [ô]NOV[ô][Ô]
+ [Ô] WHEN [ô]12[ô] THEN [ô]DEZ[ô][Ô]
+ [Ô] END AS Mes, SUM(Vendas) AS Vendas[Ô]
+ [Ô] FROM [Ô];

public const string clausula = [Ô] WHERE Data BETWEEN @data3 AND @data4[Ô]
+ [Ô] GROUP BY DATENAME(MONTH,Data), YEAR(Data), MONTH(Data), Filial[Ô]
+ [Ô] ORDER BY YEAR(Data), MONTH(Data)[Ô];
}
}
Tópico encerrado , respostas não são mais permitidas