MULTREADER MYSQL
olá amigos,
Estou passando a conexão do meu projeto de ODBCconnection + driver MYSQL ODBC 5.1 para mysqlconnection + driver mysql.net
porem estou tento alguns problemas em abrir varios datareaders em serie. recebo a mensagem abaixo:
[Ô]There is already an open DataReader associated with this Connection which must be closed first.[Ô]
alguem sabe como configurar o mysql para aceitar mais de um datareader dentro da mesma conexão?
no sqlverver tem a opção de multreader [Ô]MultipleActiveResultSets=true[Ô] alguem sabe de algo no mysql?
segue código:
Dim reader As MySqlDataReader
Dim reader2 As MySqlDataReader
Dim cmd As New MySqlCommand([Ô]SHOW TABLES[Ô], conn)
Try
reader = cmd.ExecuteReader()
While (reader.Read())
Dim Tabela As String = reader.GetString(0)
Dim cmd2 As New MySqlCommand([Ô]SHOW CREATE TABLE '[Ô] & Tabela & [Ô]';[Ô], conn)
reader2 = cmd2.ExecuteReader() [ô] ---> aqui dá o erro.
End While
desde já agradeço.
Estou passando a conexão do meu projeto de ODBCconnection + driver MYSQL ODBC 5.1 para mysqlconnection + driver mysql.net
porem estou tento alguns problemas em abrir varios datareaders em serie. recebo a mensagem abaixo:
[Ô]There is already an open DataReader associated with this Connection which must be closed first.[Ô]
alguem sabe como configurar o mysql para aceitar mais de um datareader dentro da mesma conexão?
no sqlverver tem a opção de multreader [Ô]MultipleActiveResultSets=true[Ô] alguem sabe de algo no mysql?
segue código:
Dim reader As MySqlDataReader
Dim reader2 As MySqlDataReader
Dim cmd As New MySqlCommand([Ô]SHOW TABLES[Ô], conn)
Try
reader = cmd.ExecuteReader()
While (reader.Read())
Dim Tabela As String = reader.GetString(0)
Dim cmd2 As New MySqlCommand([Ô]SHOW CREATE TABLE '[Ô] & Tabela & [Ô]';[Ô], conn)
reader2 = cmd2.ExecuteReader() [ô] ---> aqui dá o erro.
End While
desde já agradeço.
alguém???
Você não pode ter múltiplos datareaders associados à uma mesma conexão. Você pode criar clones dessa conexão ou fazer a leitura de um datareader por vez.
Como você chama a conexão?
Abra uma conexão para cada DataReader, mesmo no SQL Server com o MultipleActiveResultSets ele não roda exatamente ao mesmo tempo mais de um comando, dependendo do comando ele na verdade interrompe um para executar o outro, se forem inserts e updates por exemplo ele vai bloquear até estes comandos terminarem para voltar a executar um select, então muitas vezes é melhor usar duas conexões mesmo no SQL Server
oi Mitsueda, uso esse modo para conctar.
Dim conn As MySqlConnection
[ô]driver mysql 6.6.5.0
private sub opem_conexao
If Not conn Is Nothing Then conn.Close()
Dim connStr As String
connStr = String.Format([Ô]server={0};user id={1}; password={2}; database=mysql; pooling=false[Ô], _
server.Text, userid.Text, password.Text )
Try
conn = New MySqlConnection(connStr)
conn.Open()
GetDatabases()
Catch ex As MySqlException
MessageBox.Show([Ô]Error connecting to the server: [Ô] + ex.Message)
End Try
End Sub
Dim conn As MySqlConnection
[ô]driver mysql 6.6.5.0
private sub opem_conexao
If Not conn Is Nothing Then conn.Close()
Dim connStr As String
connStr = String.Format([Ô]server={0};user id={1}; password={2}; database=mysql; pooling=false[Ô], _
server.Text, userid.Text, password.Text )
Try
conn = New MySqlConnection(connStr)
conn.Open()
GetDatabases()
Catch ex As MySqlException
MessageBox.Show([Ô]Error connecting to the server: [Ô] + ex.Message)
End Try
End Sub
há vantagens em mudar da conexão com driver ODBC 5,1 para driver mysql .NET 6.6.5.0?
com o ODBC eu abro vários readers ao mesmo tempo, e posso fazer portabilidade de tipo de base de dados.
quais seriam meus ganhos em relação ao driver mysql.NET?
com o ODBC eu abro vários readers ao mesmo tempo, e posso fazer portabilidade de tipo de base de dados.
quais seriam meus ganhos em relação ao driver mysql.NET?
bom dia
segue alguns link que podem ajudar
ADO .NET – Executando múltiplos comandos em uma única conexão
http://imasters.com.br/framework/dotnet/ado-net-executando-multiplos-comandos-em-uma-unica-conexao/
Executando múltiplas consultas usando um objeto Command
Acesse o code-behind da página pressionando a tecla F7 e escreva as linhas de código abaixo.
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
this.ExecutarMultiplaConsulta();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), [Ô]erro[Ô],
string.Format([Ô]alert([ô]{0}[ô]);[Ô], ex.Message), true);
}
}
private void ExecutarMultiplaConsulta()
{
using (SqlConnection con =
new SqlConnection(ConfigurationManager.ConnectionStrings[[Ô]connStringSqlServer[Ô]].ToString()))
{
using (SqlCommand cmd =
new SqlCommand([Ô]SELECT * FROM Products; SELECT * FROM Categories[Ô], con))
{
cmd.CommandType = System.Data.CommandType.Text;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
//Preencher o primeiro ListBox com os produtos
while (dr.Read())
{
lstProduto.Items.Add(dr[[Ô]ProductName[Ô]].ToString());
}
//Obter o resultado da próxima query
dr.NextResult();
//Preencher o segundo ListBox com as categorias
while (dr.Read())
{
lstCategoria.Items.Add(dr[[Ô]CategoryName[Ô]].ToString());
}
}
}
}
Antes de tudo, precisei criar uma connection string apontando para um servidor SQL Server local. Segue a configuração do arquivo web.config.
<connectionStrings>
<add name=[Ô]connStringSqlServer[Ô] connectionString=[Ô]Data Source=.\SQLEXPRESS; Initial Catalog=Northwind; Trusted_Connection=True;[Ô] providerName=[Ô]System.Data.SqlClient[Ô]/>
</connectionStrings>
foi executado duas consultas no banco de dados, usando os mesmos objetos que seriam utilizados para uma única consulta.
segue alguns link que podem ajudar
ADO .NET – Executando múltiplos comandos em uma única conexão
http://imasters.com.br/framework/dotnet/ado-net-executando-multiplos-comandos-em-uma-unica-conexao/
Executando múltiplas consultas usando um objeto Command
Acesse o code-behind da página pressionando a tecla F7 e escreva as linhas de código abaixo.
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
this.ExecutarMultiplaConsulta();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), [Ô]erro[Ô],
string.Format([Ô]alert([ô]{0}[ô]);[Ô], ex.Message), true);
}
}
private void ExecutarMultiplaConsulta()
{
using (SqlConnection con =
new SqlConnection(ConfigurationManager.ConnectionStrings[[Ô]connStringSqlServer[Ô]].ToString()))
{
using (SqlCommand cmd =
new SqlCommand([Ô]SELECT * FROM Products; SELECT * FROM Categories[Ô], con))
{
cmd.CommandType = System.Data.CommandType.Text;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
//Preencher o primeiro ListBox com os produtos
while (dr.Read())
{
lstProduto.Items.Add(dr[[Ô]ProductName[Ô]].ToString());
}
//Obter o resultado da próxima query
dr.NextResult();
//Preencher o segundo ListBox com as categorias
while (dr.Read())
{
lstCategoria.Items.Add(dr[[Ô]CategoryName[Ô]].ToString());
}
}
}
}
Antes de tudo, precisei criar uma connection string apontando para um servidor SQL Server local. Segue a configuração do arquivo web.config.
<connectionStrings>
<add name=[Ô]connStringSqlServer[Ô] connectionString=[Ô]Data Source=.\SQLEXPRESS; Initial Catalog=Northwind; Trusted_Connection=True;[Ô] providerName=[Ô]System.Data.SqlClient[Ô]/>
</connectionStrings>
foi executado duas consultas no banco de dados, usando os mesmos objetos que seriam utilizados para uma única consulta.
Tópico encerrado , respostas não são mais permitidas