Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Konzept Frage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
20.01.2007, 17:06 Uhr
Eroli



Ok, da klappt was nicht. Meine Tabelle hat einen Eintrag, somit müsste der Befehl aus dem Screenshot eigentlich eine ID ausgeben, macht er aber nicht......

Ich habe das ganze zum Testen mit dem Management Studio gemacht, der C# Code klappt aber auch nciht.....der Befehl liefert einfach nur "null".

Foto: hier klicken

mein Quelltext sieht so aus(C#):


C++:
SqlCommand.CommandText = "SELECT SCOPE_IDENTITY()";
        SqlConnection.Open();
        object auctionID = SqlCommand.ExecuteScalar();
        SqlConnection.Close();
        SqlConnection.Dispose();
        Response.Redirect(string.Format("~/Seitenname?auctionId={0},mode={1}",Convert.ToInt64(auctionID),1));

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
20.01.2007, 17:33 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Das funktioniert nur aus dem Programm heraus oder überd die Konsole, da IMO das Management Studio nicht die volle Syntax unterstützt. Wenn Du den Quellcode da oben ausführst ohne vorher ein Insert in die Tabelle zu machen, solltest Du als Rückgabewert System.DBNULL erhalten.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 20.01.2007 um 17:34 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
20.01.2007, 17:35 Uhr
Eroli



Achso.

Gut, dann lag die Exception wahrscheinlich daran, dass ich das Objekt nicht durch Convert.ToInt64() umwandeln kann, oder???

Oder woran lag die Exception?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
20.01.2007, 17:44 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Sicherlich, das ist ja das was ich vorhin gemeint habe, es kann eben auch NULL zurück gegeben werden. Wenn du einen cast nach Int64 versuchst dann scheppert's .
Setz mal einen Haltepunkt auf die Zeile SqlConnection.Close(); und schau Dir den Wert von auctionID an.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
20.01.2007, 18:16 Uhr
Eroli



Er hat den Wert:

System.DBNull


Wie kann das sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
21.01.2007, 09:06 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Machst du unmittelbar vorher den Insert? Steht der Quellcode mit in der Funktion die das Insert ausführt? Wie sieht der komplette Quellcode der aufrufenden Funktion aus?

Bearbeitung von uwe:

Hab das jetzt einmal in einer nicht Webanwendung getestet, da funktioniert es.


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 21.01.2007 um 09:09 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
21.01.2007, 11:55 Uhr
Eroli



Hallo Uwe,

weiter unten siehst du mal einen größeren Ausschnitt:


C++:
        System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
        System.Data.SqlClient.SqlConnection SqlConnection = new System.Data.SqlClient.SqlConnection();
        SqlConnection.ConnectionString = (string)System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlCommand.Connection = SqlConnection;
        SqlCommand.CommandText = "INSERT INTO AuctionsTable([User], [Categorie], [Title], [Description], [Price], [Appointment], [Location], [CreationDate], [Material], [Payment], [Qualifications], [PublicLiability], [NumberOfEmployees], [NumberOfReferences], [EvaluationCriterias], [Miscellaneous], [PictureCount]) VALUES (@User, @Categorie, @Title, @Description, @Price, @Appointment, @Location, @CreationDate, @Material, @Payment, @Qualifications, @PublicLiability, @NumberOfEmployees, @NumberOfReferences, @EvaluationCriterias, @Miscellaneous, @PictureCount)";
        SqlCommand.Parameters.AddWithValue("@User", Context.User.Identity.Name);
        SqlCommand.Parameters.AddWithValue("@Categorie", CategorieDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Title", AuctionTitleTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Description", DescriptionTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Price", PriceTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Appointment", AppointmentCalendar.SelectedDate);
        SqlCommand.Parameters.AddWithValue("@Location", LocationTextBox2.Text);
        SqlCommand.Parameters.AddWithValue("@CreationDate", DateTime.Now);
        SqlCommand.Parameters.AddWithValue("@Material", MaterialRadioButtonList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Payment", PaymentDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Qualifications", QualificationsDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@PublicLiability", PublicLiabilityRadioButtonList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@NumberOfEmployees", EmployeesDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@NumberOfReferences", ReferencesDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@EvaluationCriterias", EvaluationDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Miscellaneous", MiscellaneousTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@PictureCount", 0);
        SqlConnection.Open();
        SqlCommand.ExecuteNonQuery();
        SqlConnection.Close();
        SqlCommand.CommandText = "SELECT SCOPE_IDENTITY()";
        SqlConnection.Open();
        object auctionID = SqlCommand.ExecuteReader();
        SqlConnection.Close();
        SqlConnection.Dispose();
        NewAuctionPanel.Enabled = false;
        PictureUploadPanel.Visible = true;
        Response.Redirect(string.Format("~/usercenter.aspx?auctionId={0},mode={1}",Convert.ToInt64(auctionID),1));



In der letzten Zeile beim unwandeln in einen long kommt folgende Exception

C++:
System.InvalidCastException wurde nicht von Benutzercode behandelt.
  Message="Das Objekt des Typs System.Data.SqlClient.SqlDataReader kann nicht in Typ System.IConvertible umgewandelt werden."
  Source="mscorlib"
  StackTrace:
       bei System.Convert.ToInt64(Object value)
       bei ASP.privatepages_usercenter_aspx.SubmitButton_Click(Object sender, EventArgs e) in d:\pfad\usercenter.aspx:Zeile 497.
       bei System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       bei System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       bei System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)




Wie ihr im Code seht habe ich es mal mit ExecuteReader() probiert, aber es kommt der Fehler bei der Umwandlung.
Wenn ich es so mache, wie du es beschrieben hast, mit ExecuteScalar(), dann krieg ich folgende Exception bei der Umwandlung:

C++:
System.InvalidCastException wurde nicht von Benutzercode behandelt.
  Message="Ein Objekt kann nicht von DBNull in andere Typen umgewandelt werden."
  Source="mscorlib"
  StackTrace:
       bei System.DBNull.System.IConvertible.ToInt64(IFormatProvider provider)
       bei System.Convert.ToInt64(Object value)
       bei ASP.privatepages_usercenter_aspx.SubmitButton_Click(Object sender, EventArgs e) in d:\pfad\usercenter.aspx:Zeile 497.
       bei System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       bei System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       bei System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



Dieser Post wurde am 21.01.2007 um 12:05 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
21.01.2007, 12:39 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Eroli,
Ich denke ich erkenne das Problem:

Zitat von Eroli:


C++:
..........
..........
        SqlCommand.Parameters.AddWithValue("@PictureCount", 0);
        SqlConnection.Open();
        SqlCommand.ExecuteNonQuery();
        SqlConnection.Close(); // hier nicht schließen!!!
        SqlCommand.CommandText = "SELECT SCOPE_IDENTITY()";
        //SqlConnection.Open();
        object auctionID = SqlCommand.ExecuteReader();
        SqlConnection.Close();
..........
..........



Du schließt die aktuelle Verbindung. Also ist Deine Session beendet! Dann fährst Du ein Select auf die Datenmenge. Scope_identity() wird dann immer ins leere greifen (also wird dann immer DBNULL geliefert)!
Also lass die Verbindung offen bis alles erledigt ist.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 21.01.2007 um 12:39 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
21.01.2007, 13:06 Uhr
Eroli



Nein, das war es nicht.
Exception

Zitat:

System.InvalidCastException wurde nicht von Benutzercode behandelt.
Message="Ein Objekt kann nicht von DBNull in andere Typen umgewandelt werden."
Source="mscorlib"
StackTrace:
bei System.DBNull.System.IConvertible.ToInt64(IFormatProvider provider)
bei System.Convert.ToInt64(Object value)
bei ASP.privatepages_usercenter_aspx.SubmitButton_Click(Object sender, EventArgs e) in dpfad\usercenter.aspx:Zeile 495.
bei System.Web.UI.WebControls.Button.OnClick(EventArgs e)
bei System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
bei System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
bei System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
bei System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



auctionID ist leider immernoch null!Die Exception wird bei COnver.ToInt64() geworfen.

In meiner Tabelle bin ich jetzt schon bei ID = 9 angekommen, daran kanne s also nicht liegen...

Quelltext:

C++:
        System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
        System.Data.SqlClient.SqlConnection SqlConnection = new System.Data.SqlClient.SqlConnection();
        SqlConnection.ConnectionString = (string)System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlCommand.Connection = SqlConnection;
        SqlCommand.CommandText = "INSERT INTO AuctionsTable([User], [Categorie], [Title], [Description], [Price], [Appointment], [Location], [CreationDate], [Material], [Payment], [Qualifications], [PublicLiability], [NumberOfEmployees], [NumberOfReferences], [EvaluationCriterias], [Miscellaneous], [PictureCount]) VALUES (@User, @Categorie, @Title, @Description, @Price, @Appointment, @Location, @CreationDate, @Material, @Payment, @Qualifications, @PublicLiability, @NumberOfEmployees, @NumberOfReferences, @EvaluationCriterias, @Miscellaneous, @PictureCount)";
        SqlCommand.Parameters.AddWithValue("@User", Context.User.Identity.Name);
        SqlCommand.Parameters.AddWithValue("@Categorie", CategorieDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Title", AuctionTitleTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Description", DescriptionTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Price", PriceTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Appointment", AppointmentCalendar.SelectedDate);
        SqlCommand.Parameters.AddWithValue("@Location", LocationTextBox2.Text);
        SqlCommand.Parameters.AddWithValue("@CreationDate", DateTime.Now);
        SqlCommand.Parameters.AddWithValue("@Material", MaterialRadioButtonList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Payment", PaymentDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Qualifications", QualificationsDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@PublicLiability", PublicLiabilityRadioButtonList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@NumberOfEmployees", EmployeesDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@NumberOfReferences", ReferencesDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@EvaluationCriterias", EvaluationDropDownList.SelectedItem.Text);
        SqlCommand.Parameters.AddWithValue("@Miscellaneous", MiscellaneousTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@PictureCount", 0);
        SqlConnection.Open();
        SqlCommand.ExecuteNonQuery();
        SqlCommand.CommandText = "SELECT SCOPE_IDENTITY()";
        object auctionID = SqlCommand.ExecuteScalar();
        SqlConnection.Close();
        SqlConnection.Dispose();
        NewAuctionPanel.Enabled = false;
        PictureUploadPanel.Visible = true;
        Response.Redirect(string.Format("~/PrivatePages/PrivateUserCenter.aspx?auctionId={0},mode={1}",Convert.ToInt64(auctionID),1));



1: Woran liegt es, dass auctionID immernoch null ist?
2: In der letzen Zeile, wenn man mehrere Argumente in einem QueryString angibt, trennt man diese mit einem Kommer oder Semikolon oder wie?

Viele Grüße,
Eroli

Dieser Post wurde am 21.01.2007 um 13:14 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
21.01.2007, 14:40 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Eroli,
Dreckzeug's
Hab gerade mal ein Webprojekt probiert. Stimmt, sobald .Parameters.AddWithValue(...) ins Spiel kommt, wird NULL zurück gegeben.
Also folgendes funktioniert bei mir

C++:
SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "blablabla";
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        string strCmd = "INSERT INTO T_MAX (NAME, VORNAME) VALUES (@Name, @Vorname); SELECT SCOPE_IDENTITY()";
        cmd.CommandText = strCmd;
        cmd.Parameters.AddWithValue("@Name", "Hasig");
        cmd.Parameters.AddWithValue("@Vorname", "Hans");
               if (conn.State == ConnectionState.Closed)
            conn.Open();
        object NextID = cmd.ExecuteScalar();
        conn.Close();


Also die SELECT SCOPE_IDENTITY() direkt an die Insert anhängen!!! und nur ExecuteScalar(); aufrufen!!!
Mann o mann...
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: