sabato 22 marzo 2008

.NET SQL c# recuperare l'id del record appena inserito

E' di vitale importanza recuperare l'effettivo id (o di una qualsiasi chiave) di un record appena inserito con una INSERT. Di seguito il codice in c# :

string query = "INSERT INTO Blog (titolo, contenuto, data, dataCreazione, bozza) ";
query += "VALUES (@Titolo, @Contenuto, @Data, @DataCreazione, @Bozza); ";
query += "SET @PostID = SCOPE_IDENTITY()";
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBTEST"].ConnectionString);
SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandType = CommandType.Text;

SqlParameter TitoloParameter = new SqlParameter("@Titolo", SqlDbType.VarChar, 255);
TitoloParameter.Value = tbTitolo.Text;
cmd.Parameters.Add(TitoloParameter);

SqlParameter ContenutoParameter = new SqlParameter("@Contenuto", SqlDbType.NText);
ContenutoParameter.Value = tbContenuto.Text;
cmd.Parameters.Add(ContenutoParameter);

SqlParameter DataParameter = new SqlParameter("@Data", SqlDbType.DateTime, 8);
DataParameter.Value = dataPostStr;
cmd.Parameters.Add(DataParameter);

SqlParameter DataCreazioneParameter = new SqlParameter("@DataCreazione", SqlDbType.DateTime, 8);
DataCreazioneParameter.Value = DateTime.Now.ToShortDateString();
cmd.Parameters.Add(DataCreazioneParameter);

SqlParameter BozzaParameter = new SqlParameter("@Bozza", SqlDbType.Bit, 1);
BozzaParameter.Value = true;
cmd.Parameters.Add(BozzaParameter);

SqlParameter IDParameter = new SqlParameter("@PostID",SqlDbType.Int);
IDParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(IDParameter);

conn.Open();
cmd.ExecuteNonQuery();
int idPost = (int)IDParameter.Value;
conn.Close();

this.lblIdPost.Text = "ID del post inserito: " + idPost.ToString();

In rosso il codice più importante...
se avete problemi a leggere il codice provate con questa vaersione: Insert scope_identity in c#

Happy SQL

Nessun commento: