6 messaggi dal 03 luglio 2006
ciao a tutti sto sviluppando un applicazione c# ed ho la necessità di memorizzare i dati in un database gestito con sqlserver2000.

eseguo i seguenti passi:

string strConn="Data Source=NOMESERVER; Integrated Security=SSPI; initial catalog=NOMEDATABASE";
SqlConnection connessione=new SqlConnection(strConn);

string strCommand="INSERT INTO nometab (elencocampi) VALUES ('valori')";

SqlCommand esecuzione= SqlCommand(strCommand,connessione);
esecuzione.Connection.Open();
esecuzione.ExecuteNonQuery();
esecuzione.Connection.Close();
connessione.Close;

mando in esecuzione il mio programma e alla riga dellExecuteNonQuery mi viene dato un exception di tipo"System.Data.SqlClient.SqlException", con Additional information:Errore di sistema.

ora ho controllato l msdn e vari articoli in rete, ho controllato anche un vecchio software che avevo realizzato anche se con driver odbc ed i passi sono sempre corretti(le librerie ovviamente cambiano)

dove puo essere l errore?datemi qualche consiglio please

ps non sono state modificate nessuna delle opzioni del DB.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
flopic77 ha scritto:

string strCommand="INSERT INTO nometab (elencocampi) VALUES ('valori')";


se il codice e' veramente questo, e' probabile che dia errori...

presupponendo che "elencocampi" sia qualche cosa come ( colX, colY, colZ), e quindi un qualche cosa di valido, spero proprio che 'valori' lo sia altrettanto, quindi simile a VALUES ( intColX, 'varcharColY', 'varcharColZ');
e non una "stringa" contenente tutti i "valori"..

prendiamo ad esempio la l'entita'
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.Flopic77 (
Id int NOT NULL PRIMARY KEY,
Nome varchar(10) NOT NULL,
D_Nasc datetime NULL
);

GO
-- eseguire codice c#
SELECT * FROM dbo.Flopic77 ;
GO
DROP TABLE dbo.Flopic77;

ci sono almeno 2 modi diretti di eseguire una query di inserimento, l'utilizzo di parametri e l'utilizzo di un comando preparato diretto...
l'utilizzo dei parametri e' raccomandato in quanto ti consente un maggior controllo sui dati immessi, quindi eventuali validazioni che proteggano anche da SQL Injection...
tipicamente, il codice di inserimento potrebbe assomigliare a quanto segue

static void ExecDirect()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Server=(Local);Database=tempdb;Trusted_Connection=True;Persist Security Info=False";
con.Open();

// modo piu' corretto di eseguire comandi, visto che
// consente di verificare meglio il valore passato ai parametri
// e quindi anche evitare SQLInjection;
SqlParameter par = new SqlParameter();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "INSERT INTO dbo.Flopic77 (Id, Nome, D_Nasc) VALUES (@Id, @Nome, @D_Nasc);";
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandTimeout = 0;
cmd.Connection = con;
par = cmd.CreateParameter();
par.ParameterName = "@Id";
par.Direction = System.Data.ParameterDirection.Input;
par.SqlDbType = System.Data.SqlDbType.Int;
par.Size = 4;
par.Value = 1;
cmd.Parameters.Add(par);

par = new SqlParameter();
par = cmd.CreateParameter();
par.ParameterName = "@Nome";
par.Direction = System.Data.ParameterDirection.Input;
par.SqlDbType = System.Data.SqlDbType.VarChar;
par.Size = "Andrea".Length;
par.Value = "Andrea";
cmd.Parameters.Add(par);

par = new SqlParameter();
par = cmd.CreateParameter();
par.ParameterName = "@D_Nasc";
par.Direction = System.Data.ParameterDirection.Input;
par.SqlDbType = System.Data.SqlDbType.DateTime;
par.Value = DateTime.Parse("1965-10-30");
cmd.Parameters.Add(par);

cmd.ExecuteNonQuery();
cmd.Dispose();
cmd = null;

// modo "brutale" di eseguire un comando direttamente...
int Id = 2;
string Nome = "Pippo";
DateTime D_Nasc = DateTime.Parse("1977-01-01");
string commandText = string.Format("INSERT INTO dbo.Flopic77 (Id, Nome, D_Nasc) VALUES ({0} , '{1}', '{2}');", Id, Nome, D_Nasc.ToString("yyyy-MM-dd"));
cmd = new SqlCommand();
cmd.CommandText = commandText;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandTimeout = 0;
cmd.Connection = con;

cmd.ExecuteNonQuery();
cmd.Dispose();
cmd = null;

con.Close();
con = null;
}

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
6 messaggi dal 03 luglio 2006
Il codice none era propriamente quello cmq il suo consiglio ha risolto il mio problema,grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.