PDA

View Full Version : C# errore di una SqlConnection ad un Data Source remoto


Lover
30-09-2008, 09:20
lavorando con Visual Studio 2005,

questa l'istruzione:

private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=AMM;Integrated Security = True;User ID=myuser;Password=mypwd");

conn.Open();

SqlCommand comando = new SqlCommand("select * from wom.damage_order", conn);

SqlDataReader dataReader = comando.ExecuteReader();

while (dataReader.Read() )
{

listBox1.Items.Add("POD: " + dataReader.GetString(16) );

}
conn.Close();
}
}
}

il comando conn.Open genera il seguente errore

System.Data.SqlClient.SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - Connessione in corso interrotta forzatamente dall'host remoto.)


Voglio precisare che il Data Source AMM è correttamente configurato tra le origini dati ODBC;

Su SQL Server Surface Area Configuration for Services and Connections,
ho impostato, in Remote Connections, Using both TCP/IP and named pipes.

Il bello è che all'interno dello stesso form, viene riempito correttamente un datagrid con un dataTable che si riferisce alla stessa origine dati,
quindi il server remoto già mi permette di accedere...

Mi sfugge qualcosa???

RobyG_08
30-09-2008, 16:10
Hai provato ad utilizzare la stessa connessione che hai già aperto per riempire la grid invece di istanziarne una nuova?

Lover
01-10-2008, 11:06
Hai provato ad utilizzare la stessa connessione che hai già aperto per riempire la grid invece di istanziarne una nuova?


MAgari sapessi come si fà!

questo è il SRC completo (all'interno dello stesso form1 ho sia il dataGrid che, al click su button1, riesco a riempire tranquillamente con la stessa tabella che non riesco a raggiungere col dataReader):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dataSetAmm.DataTable1' table. You can move, or remove it, as needed.
// this.dataTable1TableAdapter.Fill(this.dataSetAmm.DataTable1);

}

private void button1_Click(object sender, EventArgs e)
{
this.dataTable1TableAdapter.Fill(this.dataSetAmm.DataTable1);
}

private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=AMM;Integrated Security = True;User ID=myuser;Password=mypwd");

conn.Open();

SqlCommand comando = new SqlCommand("select * from wom.damage_order", conn);

SqlDataReader dataReader = comando.ExecuteReader();

while (dataReader.Read() )
{

listBox1.Items.Add("POD: " + dataReader.GetString(16) );

}
conn.Close();
}

private void dataTable1BindingSource_CurrentChanged(object sender, EventArgs e)
{

}
}
}

RobyG_08
01-10-2008, 11:37
MAgari sapessi come si fà!

questo è il SRC completo (all'interno dello stesso form1 ho sia il dataGrid che, al click su button1, riesco a riempire tranquillamente con la stessa tabella che non riesco a raggiungere col dataReader):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dataSetAmm.DataTable1' table. You can move, or remove it, as needed.
// this.dataTable1TableAdapter.Fill(this.dataSetAmm.DataTable1);

}

private void button1_Click(object sender, EventArgs e)
{
this.dataTable1TableAdapter.Fill(this.dataSetAmm.DataTable1);
}

private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=AMM;Integrated Security = True;User ID=myuser;Password=mypwd");

conn.Open();

SqlCommand comando = new SqlCommand("select * from wom.damage_order", conn);

SqlDataReader dataReader = comando.ExecuteReader();

while (dataReader.Read() )
{

listBox1.Items.Add("POD: " + dataReader.GetString(16) );

}
conn.Close();
}

private void dataTable1BindingSource_CurrentChanged(object sender, EventArgs e)
{

}
}
}

Mi pare di capire che c'è un dataTable1TableAdapter nel form, l'adapter dovrebbe avere la proprietà connection, quindi prova a fare anzichè

SqlCommand comando = new SqlCommand("select * from wom.damage_order", conn);

SqlCommand comando = new SqlCommand("select * from wom.damage_order", dataTable1TableAdapter.Connection);

Magari prima fai un test sullo stato della connessione

if(dataTable1TableAdapter.Connection.State == ConnectionState.Closed)
dataTable1TableAdapter.Connection.Open();

Cmq se va l'adapter guarda che connessione usa

Lover
02-10-2008, 09:57
Mi pare di capire che c'è un dataTable1TableAdapter nel form, l'adapter dovrebbe avere la proprietà connection, quindi prova a fare anzichè

SqlCommand comando = new SqlCommand("select * from wom.damage_order", conn);

SqlCommand comando = new SqlCommand("select * from wom.damage_order", dataTable1TableAdapter.Connection);

Magari prima fai un test sullo stato della connessione

if(dataTable1TableAdapter.Connection.State == ConnectionState.Closed)
dataTable1TableAdapter.Connection.Open();

Cmq se va l'adapter guarda che connessione usa

già così la cosa mi garba parecchio!!

Grazie Roby!!!
;)

tomminno
02-10-2008, 10:59
Magari prima fai un test sullo stato della connessione

if(dataTable1TableAdapter.Connection.State == ConnectionState.Closed)
dataTable1TableAdapter.Connection.Open();

Cmq se va l'adapter guarda che connessione usa

Premesso che mettere l'accesso ai dati direttamente nell'interfaccia grafica va contro tutte le principali norme di programmazione, e se il connection state non è closed?

RobyG_08
02-10-2008, 11:58
Premesso che mettere l'accesso ai dati direttamente nell'interfaccia grafica va contro tutte le principali norme di programmazione, e se il connection state non è closed?

Ma vabbè è solo un semplice test per vedere se la connessione funziona. Testato ciò è chiaro che rimane da vedere dove sbagliava, però se funziona così, già capisci che la stringa di connessione che usa l'adapter è corretta. Senza dubbio son daccordo con te sul fatto che l'adapter schiaffato in progettazione è da evitare, personalmente mai usato in quel modo, ripeto era solo un modo per capire il problema (anche perchè se la connessione al db è sempre la stessa non ha senzo istanziarne sempre di nuove in ogni metodo)

Lover
06-10-2008, 09:15
Ma vabbè è solo un semplice test per vedere se la connessione funziona. Testato ciò è chiaro che rimane da vedere dove sbagliava, però se funziona così, già capisci che la stringa di connessione che usa l'adapter è corretta. Senza dubbio son daccordo con te sul fatto che l'adapter schiaffato in progettazione è da evitare, personalmente mai usato in quel modo, ripeto era solo un modo per capire il problema (anche perchè se la connessione al db è sempre la stessa non ha senzo istanziarne sempre di nuove in ogni metodo)

Infatti sono d'accordo con te..
il fatto è che per mettere su queste applicazioni (se così possono chiamarsi :p ) mi sto affidando a dei video tutorial..
ho esperienze in programmazione, ma non sò assolutamente nulla di C#..

ancora grazie..