Daten so speichern. Vor- und Nachteile

18/03/2008 - 07:36 von Andreas Kammann | Report spam
Hallo, ich habe ja letztens gefragt wie man Daten richtig in einer Datenbank
abspeichert. Ich habe jetzt mal ein bisschen gesucht und folgenden Code
gefunden.

Hier wird ja eine Stored Procedure in der Datenbank aufgerufen die die Daten
denn speichert. Ist diese Vorgehensweise eigentlich richtig ? Und wo liegen
die Vor- und Nachteile wenn man so arbeitet ?



Gruss



using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{

SqlCommand cmd = new SqlCommand("tbh_Articles_InsertArticle", cn);

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@AddedDate", SqlDbType.DateTime).Value =
article.AddedDate;
cmd.Parameters.Add("@AddedBy", SqlDbType.NVarChar).Value = article.AddedBy;
cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = article.CategoryID;
cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = article.Title;
cn.Open();
int ret = ExecuteNonQuery(cmd);
return (int)cmd.Parameters["@ArticleID"].Value;







/****** Object: StoredProcedure [dbo].[tbh_Articles_InsertArticle] Script
Date: 03/18/2008 07:35:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[tbh_Articles_InsertArticle]

(

@AddedDate datetime,

@AddedBy nvarchar(256),

@CategoryID int,

@Title nvarchar(256),

)

AS

SET NOCOUNT ON


INSERT INTO tbh_Articles

(AddedDate, AddedBy, CategoryID, Title, Abstract, Body, Country, State,
City, ReleaseDate, ExpireDate, Approved, Listed, CommentsEnabled,
OnlyForMembers)

VALUES (@AddedDate, @AddedBy, @CategoryID, @Title, @Abstract, @Body,
@Country, @State, @City, @ReleaseDate, @ExpireDate, @Approved, @Listed,
@CommentsEnabled, @OnlyForMembers)

SET @ArticleID = scope_identity()
 

Lesen sie die antworten

#1 Henry Habermacher
18/03/2008 - 08:02 | Warnen spam
Hallo Andreas

Andreas Kammann wrote:
Hallo, ich habe ja letztens gefragt wie man Daten richtig in einer
Datenbank abspeichert. Ich habe jetzt mal ein bisschen gesucht und
folgenden Code gefunden.

Hier wird ja eine Stored Procedure in der Datenbank aufgerufen die die
Daten denn speichert. Ist diese Vorgehensweise eigentlich richtig ? Und
wo liegen die Vor- und Nachteile wenn man so arbeitet ?

using (SqlConnection cn = new SqlConnection(this.ConnectionString))
{

SqlCommand cmd = new SqlCommand("tbh_Articles_InsertArticle", cn);

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@AddedDate", SqlDbType.DateTime).Value > article.AddedDate;
cmd.Parameters.Add("@AddedBy", SqlDbType.NVarChar).Value > article.AddedBy; cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value > article.CategoryID; cmd.Parameters.Add("@Title",
SqlDbType.NVarChar).Value = article.Title; cn.Open();
int ret = ExecuteNonQuery(cmd);
return (int)cmd.Parameters["@ArticleID"].Value;



Der Nachteil daran ist, dass Du nun Deinen Code verteilst, ein Teil des
Codes liegt in der Anwendung, der andere Teil liegt in der Datenbank. Wenn
Du was beim Update àndern willst, dann musst Du jeweils an zwei Orten àndern
gehen. Wenn es allerdings die SP bereits gibt und Du die nicht àndern
kannst, dann ist das durchaus sinnvoll.

Ich selber würde einfach ein CommandText vergeben, die Parameter für das
SQLCommand Objekt setzen und dann dieses über ExecuteNonQuery ausführen.

Also etwa in der Art:

cmd.CommandText = "INSERT INTO tbh_Articles (AddedDate, AddedBy, CategoryID,
Title, Abstract, Body, Country, State, City, ReleaseDate, ExpireDate,
Approved, Listed, CommentsEnabled, OnlyForMembers) VALUES (@AddedDate,
@AddedBy, @CategoryID, @Title, @Abstract, @Body, @Country, @State, @City,
@ReleaseDate, @ExpireDate, @Approved, @Listed, @CommentsEnabled,
@OnlyForMembers)";
cmd.Parameters.Add("@AddedDate", SqlDbType.DateTime).Value =
article.AddedDate;
cmd.Parameters.Add("@AddedBy", SqlDbType.NVarChar).Value = article.AddedBy;
cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = article.CategoryID;
cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = article.Title;
cn.Open();
cn.Open();
cmd.ExecuteNonQuery;

Damit Du anschliessend die Artikel ID zurückbekommst schickst Du gleich
folgenden Befehl hinterher:
cmd.CommandText = "SELECT @@IDENTITY"
cmd.Parameters.Clear
int ret = cmd.ExecuteScalar

Damit bleibt der gesamte Code in Deiner Anwendung.

HTH
Henry




SEK2 Anmeldung: http://donkarl.com/?SEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen