Ich bin neu in C# und wollen mit SQL Server speichern Verfahren, in dem SQL-Server schreiben diesen Speicher Prozedur einfache Anwendung Arbeit schreiben:
Warum kann ich nicht mit der Speicherprozedur Rückgabewert C# umgehen?
USE [mammutRecruitment]
ALTER PROCEDURE [dbo].[FirstStep]
@Name nvarchar(max),@Family nvarchar(max),@FatherName nvarchar(max),@BirthCertificate bigint,@PlaceOfBirth nvarchar(max),@BirthDate datetime,
@NationalCode bigint,@Religion nvarchar(max),@faith nvarchar(max),@Nationality nvarchar(max),@BloodGroup nvarchar(max)
AS
BEGIN
DECLARE @MYID bigint
insert into [dbo].[UserMainSpecifications] values(@Name,@Family,@FatherName,@BirthCertificate,@PlaceOfBirth,1,@BirthDate,@NationalCode,
@Religion,@faith,@Nationality,@BloodGroup,12,'123','123',1,2015-1-1,'12','123','1234',1)
select @MYID=[UserID] from [mammutRecruitment].[dbo].[UserMainSpecifications]
where [NationalCode][email protected]
select @MYID as myID
END
und in C# schreiben diesen Code für Anruf, dass :
using (SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=mammutRecruitment;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("FirstStep", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = m.Name;
cmd.Parameters.Add("@Family", SqlDbType.NVarChar).Value = m.Family;
cmd.Parameters.Add("@FatherName", SqlDbType.NVarChar).Value = m.FatherName;
cmd.Parameters.Add("@BirthCertificate", SqlDbType.BigInt).Value =Convert.ToInt64(m.BirthCertificate);
cmd.Parameters.Add("@PlaceOfBirth", SqlDbType.NVarChar).Value = m.PlaceOfBirth;
cmd.Parameters.Add("@BirthDate", SqlDbType.DateTime).Value =Convert.ToDateTime(dt.ToString());
cmd.Parameters.Add("@NationalCode", SqlDbType.BigInt).Value =Convert.ToInt64(m.NationalCode);
cmd.Parameters.Add("@Religion", SqlDbType.NVarChar).Value = m.Religion;
cmd.Parameters.Add("@faith", SqlDbType.NVarChar).Value = m.faith;
cmd.Parameters.Add("@Nationality", SqlDbType.NVarChar).Value = m.Nationality;
cmd.Parameters.Add("@BloodGroup", SqlDbType.NVarChar).Value = m.BloodGroup;
SqlParameter retval = cmd.Parameters.Add("@myID", SqlDbType.BigInt);
retval.Direction = ParameterDirection.ReturnValue;
con.Open();
cmd.ExecuteNonQuery();
var retunvalue = cmd.Parameters["@myID"].Value;
aber in der dieser Linie erhalten i Null-Wert immer:
var retunvalue = cmd.Parameters["@myID"].Value;
Was passiert? Wie kann ich dieses Problem lösen? Danke.
Sie sind nicht den Wert zurückgibt, sind die Auswahl einfach lesen kann. Entweder ändern Sie Ihr Proc zu 'RETURN @ MyID' oder ändern Sie den Code in' var returnvalue = cmd.ExecuteScalar() '. – Siyual
Sie fügen den Parameter in C# -Code hinzu, aber Sie haben diesen Parameter nicht zwischen den Eingabeargumenten der gespeicherten Prozedur. – Steve
Verwenden Sie entweder ExecuteScalar, um den von der Abfrage zurückgegebenen einzelnen Wert abzurufen, oder legen Sie den Parameter als Ausgabeparameter fest, und ermitteln Sie dessen Wert auf diese Weise. – ADyson