Хранимая процедура C # SQL (которая вставляет) - передает параметры и получает параметр - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть хранимая процедура на моем сервере, которая вставляет некоторые параметры и возвращает ID, который был вставлен.Я пишу форму, чтобы сделать это легко, но я не могу получить параметр, который передается обратно.

Чтобы избавить вас от ненужного чтения, возможно, лучше просто обратить внимание на мой код C # и сообщить, что мне нужно сделать, чтобы передать параметры и получить их взамен.

C # Default.aspx

connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionInfo"]);
sql = "aStoredProc";

command = new SqlCommand(sql, connection);
command.CommandType = CommandType.StoredProcedure;

command.Parameter.Add(new SqlParameter("@FirstName", SqlDbType.VarChar)).Value = sFirstname;
command.Parameter.Add(new SqlParameter("@SurName", SqlDbType.VarChar)).Value = sSurname;

connection.Open(); 
int ID = command.ExecuteNonQuery();
connection.Close();

SQL aStoredProc

IF EXISTS(SELECT * FROM aTable WHERE ID = @ID)
  -- User exists, update details
  BEGIN
    BEGIN TRAN
      UPDATE aTable
        SET 
          FirstName = @FirstName,
          SurName = @SurName,
          LastUpdate = GetDate()
        WHERE ID = @ID

        IF (@@Error != 0)
          ROLLBACK TRAN
        ELSE
          COMMIT TRAN
        END
ELSE
  -- New user
  BEGIN
    BEGIN TRAN
      INSERT aTable (
        FirstName,
        SurName,
        GetDate()
      )
        VALUES (
          @FirstName, 
          @SurName,
          @LastUpdate
      ) 

      SELECT @ID = @@IDENTITY

      IF (@@Error != 0)
        ROLLBACK TRAN
      ELSE
        COMMIT TRAN
      END

Параметр @ID указан вхранится proc как:

@ID (int, Input/Output, No default)

, и proc имеет 'Return integer'.Раньше он работал нормально с решением VBA до обновления SQL Server 2005.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 29 декабря 2011
connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionInfo"]); 
sql = "aStoredProc"; 
command = new SqlCommand(sql, connection); 
command.CommandType = CommandType.StoredProcedure; 
command.Parameter.Add(new SqlParameter("@FirstName", SqlDbType.VarChar)).Value = sFirstname; 
command.Parameter.Add(new SqlParameter("@SurName", SqlDbType.VarChar)).Value = sSurname; 
command.Parameter.Add(new SqlParameter("@SurName", SqlDbType.VarChar)).Value = sSurname; 
SqlParameter ParamId = cmd.Parameters.Add( "@Id", SqlDbType.Int);
ParamId.Direction = ParameterDirection.InputOutput;
command.Parameter.Add(ParamId);
connection.Open();  
command.ExecuteNonQuery(); 
int ID = ParamId.Value;
connection.Close();
  1. Вы должны добавить выходной параметр в коллекцию параметров.
  2. Чтение значения, как указано выше.
2 голосов
/ 29 декабря 2011

В вашем SQL есть ошибка, она должна выглядеть так:

 INSERT aTable (FirstName,SurName,LastUpdate)
    VALUES (@FirstName, @SurName, GetDate() ) 

Не так:

 INSERT aTable (
    FirstName,
    SurName,
    GetDate()
  )
    VALUES (
      @FirstName, 
      @SurName,
      @LastUpdate
  ) 
...