Ausführen einer update-gespeicherte Prozedur in C#
Muss ich wissen, wenn ich Schreibe, die gespeicherte Prozedur ordnungsgemäß und Wenn der C# - code für die Ausführung korrekt ist. aus irgendeinem Grund ist der Fehler zurückgegeben wird, da ist Falsche syntax in der Nähe 'c16b'. Alte Fehler
Der neue Fehler ist jetzt: Prozedur oder Funktion 'sptimeupdate' erwartet parameter '@Datum', der nicht angegeben wurde.
nvarchar-Zeichenfolge für die überprüfung und Aktualisierung der in der Spalte ClientID ist 3fc8ffa1-c16b-4d7b-9e55-1e88dfe15277, aber der Teil in Fett ist nur zu zeigen, in der debug-test-intel-Sinn in der Fehlerbehandlung
ALTER PROCEDURE sptimeupdate
@id nvarchar(50),
@date datetime
AS
BEGIN
SET NOCOUNT ON;
UPDATE ClientTable
SET Today_Date=(@date)
WHERE ClientID=(@id)
END
//--------------above stored procedure--------------------------------
//--------------Executing the stored procedure in C#
IEnumerable<XElement> searchClientID =
from clientid in main.XPathSelectElements("Network/ClientID")
where (string)clientid.Attribute("id") == IntializedPorts[i].ToString()
select clientid;
foreach (string clientid in searchClientID)
{
for (int up = 0; up < IntializedPorts.Count(); up++)
{
//Update the current time in the clientid tble.
//Renames the table copy for groups
try
{
string[] Clientid; //client id array
Clientid = new string[IntializedPorts.Count()]; //Intialization of the array
Clientid[up] = clientid.ToString();
DateTime td = Convert.ToDateTime(toolDate.Text); //Just added a datetime object withdate
SqlConnection sqlConnectionCmdString = new SqlConnection(@"Data=.\SQLEXPRESS;AttachDbFilename=C:\Users\Shawn\Documents\Visual Studio 2010\Projects\Server\database\ClientRegit.mdf;Integrated Security=True;User Instance=True");
//EXECUTE THE STORED PROCEDURE sptimedate
//string UpdateCommand = "sptimeupdate" + Clientid[up].ToString() + toolDate.Text;
string UpdateCommand = "sptimeupdate" + "'" + Clientid[up].ToString() + "'" + "'" +td.ToString()+ "'"; //this is the new UpdateCommand string as to pass parameters to stored procedure
SqlCommand sqlRenameCommand = new SqlCommand(UpdateCommand, sqlConnectionCmdString);
sqlConnectionCmdString.Open();
sqlRenameCommand.ExecuteNonQuery();
sqlConnectionCmdString.Close();
}
catch(DataException ex)
{ MessageBox.Show("Failed to UpdateCurrentTime","DataError",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
- Wenn Sie könnten, auch könnten Sie bitte zeigen, im code für coverting die SQL-Daten-Verbindungs-string in eine Globale Zeichenfolge, so dass es gefunden werden kann auf jedem computer, anstatt nur von mir? Dank
- Ok, ich änderte den code etwas und jetzt gibt mir einen anderen Fehler , Ihr zu sagen, die geben nicht die datetime in der datetime-parameter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine gespeicherte Prozedur aufrufen von code, den Sie brauchen, um einen Befehl zu erstellen mit Befehl-Typ StoredProcedure, ansonsten ist der Motor versucht, Ihren Befehl text wie es war ein sql-text: SELECT EINFÜGEN etc... Aber das mose wichtigste ist, dass Sie brauchen, um passieren die erforderlichen Parameter der gespeicherten Prozedur in der Parameters-Auflistung des command
Also das könnte der code zum ersetzen der aktuellen
Beachten Sie zwei Dinge. Die using-Anweisung ist die beste Praxis zu Folgen, wenn Sie eine Verbindung erstellen, um sicherzustellen, dass das korrekte schließen und die Entsorgung der Verbindung, zweitens, die parameter der DateTime erwartet von der sp verabschiedet werden sollte als ein DateTime-nicht als string - das bedeutet natürlich, dass Sie sollten sicher sein, dass die Inhalte der toolDate ist umwandelbar zu einem DateTime-Wert.
Ihre Fehler stammt aus dieser code-Zeile:
Gibt es Sie nur in der Verknüpfung der
Clientid[up].ToString()
als eine Zeichenkette in die andere Zeichenkette, das gleiche mit dertoolDate.Text
, sowohl ohne als auch sql-markup.Die resultierende SQL-Abfrage würde wie folgt Aussehen (unter der Annahme toolDate.Text ist '2014-10-23'):
die, wie Sie sehen können, ist nicht eine korrekte SQL-Befehl.
Sollten Sie immer verwenden parametrisierten Befehl-Anweisungen beim aufrufen von einfachen SQL-Befehlen.
Jedoch in Ihrem Fall, Sie sind eigentlich das aufrufen einer gespeicherten Prozedur.
So ändern Sie Ihren code so Griff es wie eine gespeicherte Prozedur, Beispiel unten.
HINWEIS:
Bitte Lesen Sie die Kommentare in den code oben für weitere Hinweise und Anregungen.
Erstellen einer SqlConnection und SqlCommand, die für jede iteration wird die Leistung auswirken, auf Ihre Anwendung. Also lieber erstellen Sie Sie einmal und verwenden Sie Sie wieder, bis Sie fertig sind.
Weiter Lesen kann man hier:
P. S. dein sql-Prozedur-code, sieht gut aus, man könnte entfernen Sie die
SET NOTCOUNT ON
da nicht wirklich viel tun in diesem Szenario