PASSAR DATATABLE P/ STORED PROCEDURE EM SQL SERVER
prefiro sempre retornar uma tabela (select .... )
Mas se prefere output, segue exemplos
http://stackoverflow.com/questions/10905782/using-stored-procedure-output-parameters-in-c-sharp
Mas se prefere output, segue exemplos
http://stackoverflow.com/questions/10905782/using-stored-procedure-output-parameters-in-c-sharp
outro exemplo ainda mais claro e explicado
http://www.codeproject.com/Articles/748619/ADO-NET-How-to-call-a-stored-procedure-with-output
http://www.codeproject.com/Articles/748619/ADO-NET-How-to-call-a-stored-procedure-with-output
LVFIOROT,
Preciso de mais uma ajuda...
... montei uma outra Stored Procedure para devolver individualmente os parâmetros.
Testei-a no [Ô]Microsoft SQL Server Manager Studio[Ô] e funcionou:
Testei assim:
Mas não consigo resgatá-la no código C# (abaixo o código fonte completo):
[][ô]s,
Tunusat.
Preciso de mais uma ajuda...
... montei uma outra Stored Procedure para devolver individualmente os parâmetros.
Testei-a no [Ô]Microsoft SQL Server Manager Studio[Ô] e funcionou:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SelectTestVariableVariable]
(
@TableVar dbo.TableVariable READONLY,
@NameR VARCHAR(10) OUTPUT,
@AddrR VARCHAR(10) OUTPUT
)
AS
BEGIN
SELECT @NameR = Name, @AddrR = Addr
FROM dbo.TestTableVariable
WHERE ID IN (
SELECT ID
FROM @TableVar
)
RETURN
END
Testei assim:
DECLARE @TableVar dbo.TableVariable
insert into @TableVar values (3)
DECLARE @NameR VarChar(10)
DECLARE @AddrR VarChar(10)
execute SelectTestVariableVariable @TableVar, @NameR OUTPUT, @AddrR OUTPUT
select @NameR, @AddrR
Mas não consigo resgatá-la no código C# (abaixo o código fonte completo):
static void Main(string[] args)
{
try
{
DataSet dataset = new DataSet();
DataTable dataTable = new DataTable();
string strName = string.Empty;
string strAddr = string.Empty;
dataTable.Columns.Add([Ô]ID[Ô]);
var dr = dataTable.NewRow();
dr[[Ô]ID[Ô]] = 2;
dataTable.Rows.Add(dr);
//Configure seu acesso ao seu Banco de Dados lá no aquivo [Ô]App.Config[Ô]!
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[[Ô]LOCAL TESTE[Ô]].ConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand([Ô][dbo].[SelectTestTableVariable][Ô]))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.AddWithValue([Ô]@TableVar[Ô], dataTable);
//Usando o DataAdapter para preencher o DataTable
using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
{
adp.Fill(dataset);
}
}
using (SqlCommand cmd = new SqlCommand([Ô][dbo].[SelectTestVariableVariable][Ô]))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.AddWithValue([Ô]@TableVar[Ô], dataTable);
//Retorno OUTPUT
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter([Ô]@NameR[Ô], strName));
cmd.Parameters[[Ô]@NameR[Ô]].Direction = ParameterDirection.Output;
cmd.Parameters[[Ô]@NameR[Ô]].Size = 10;
cmd.Parameters.Add(new SqlParameter([Ô]@AddrR[Ô], strAddr));
cmd.Parameters[[Ô]@AddrR[Ô]].Direction = ParameterDirection.Output;
cmd.Parameters[[Ô]@AddrR[Ô]].Size = 10;
//SqlParameter pvNameR = new SqlParameter();
//pvNameR.ParameterName = [Ô]@NameR[Ô];
//pvNameR.DbType = DbType.String;
//pvNameR.Size = 10;
//pvNameR.Direction = ParameterDirection.Output;
//cmd.Parameters.Add(pvNameR);
//SqlParameter pvAddrR = new SqlParameter();
//pvAddrR.ParameterName = [Ô]@AddrR[Ô];
//pvAddrR.DbType = DbType.String;
//pvAddrR.Size = 10;
//pvAddrR.Direction = ParameterDirection.Output;
//cmd.Parameters.Add(pvAddrR);
try
{
int sqlRows = cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters[[Ô]@NameR[Ô]].Value.ToString());
if (sqlRows > 0)
{
Console.Write([Ô] - [Ô]);
Console.WriteLine(cmd.Parameters[[Ô]@NameR[Ô]].Value.ToString());
Console.WriteLine(strName);
}
}
catch (Exception e)
{
Console.WriteLine([Ô]Insere tipo de exceção: {0}[Ô], e.GetType());
Console.WriteLine([Ô] - Mensagem: {0}[Ô], e.Message);
}
}
}
//Mostrar na tela o retorno da tabela.
if (dataset.Tables.Count > 0)
{
if (dataset.Tables[0].Rows.Count > 0)
{
Console.WriteLine([Ô]1°) EXEMPLO - RETORNANDO VIA TABELA: [Ô]);
Console.Write([Ô] - Enviou um número dentro da tabela: [Ô]);
Console.WriteLine(dataTable.Rows[0][[Ô]ID[Ô]].ToString());
Console.Write([Ô] - Retornou o nome: [Ô]);
Console.WriteLine(dataset.Tables[0].Rows[0][[Ô]Name[Ô]].ToString());
Console.Write([Ô] - Retornou o endereço: [Ô]);
Console.WriteLine(dataset.Tables[0].Rows[0][[Ô]Addr[Ô]].ToString());
Console.WriteLine();
}
}
else
{
Console.WriteLine([Ô]Não mostrou nada...[Ô]);
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.ReadKey();
}
}
[][ô]s,
Tunusat.
não sei qual a logica você usa para programar.
fiz o exemplo do codeproject e funciona corretamente.
fiz o exemplo do codeproject e funciona corretamente.
static void Main(string[] args)
{
try
{
DataSet dataset = new DataSet();
DataTable dataTable = new DataTable();
string strName = string.Empty;
string strAddr = string.Empty;
dataTable.Columns.Add([Ô]ID[Ô]);
var dr = dataTable.NewRow();
dr[[Ô]ID[Ô]] = 2;
dataTable.Rows.Add(dr);
//Configure seu acesso ao seu Banco de Dados lá no aquivo [Ô]App.Config[Ô]!
using (SqlConnection conn = new SqlConnection(@[Ô]Data Source=localhost\sqlexpress;Initial Catalog=testedb;Integrated Security=True[Ô]))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand([Ô][dbo].[SelectTestTableVariable][Ô]))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.AddWithValue([Ô]@TableVar[Ô], dataTable);
SqlParameter pvNameR = new SqlParameter();
pvNameR.ParameterName = [Ô]@NameR[Ô];
pvNameR.DbType = DbType.String;
pvNameR.Size = 10;
pvNameR.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pvNameR);
SqlParameter pvAddrR = new SqlParameter();
pvAddrR.ParameterName = [Ô]@AddrR[Ô];
pvAddrR.DbType = DbType.String;
pvAddrR.Size = 10;
pvAddrR.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pvAddrR);
try
{
int sqlRows = cmd.ExecuteNonQuery();
Console.WriteLine(pvAddrR.Value.ToString());
Console.WriteLine(pvNameR.Value.ToString());
}
catch (Exception e)
{
Console.WriteLine([Ô]Insere tipo de exceção: {0}[Ô], e.GetType());
Console.WriteLine([Ô] - Mensagem: {0}[Ô], e.Message);
}
}
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.ReadKey();
}
}
LVFIOROT,
Estava errando em alguns pontos e alguns conceitos. Agora consegui fazer funcionar para os dois com duas Stored Procedures diferentes.
Obrigado, você me ajudou muito!
Vou pedir para o [ô]FoxMan[ô] subir o exemplo.
Obrigado,
Tunusat.
Estava errando em alguns pontos e alguns conceitos. Agora consegui fazer funcionar para os dois com duas Stored Procedures diferentes.
Obrigado, você me ajudou muito!
Vou pedir para o [ô]FoxMan[ô] subir o exemplo.
Obrigado,
Tunusat.
Tópico encerrado , respostas não são mais permitidas