Dil0500 Ответов: 7

Если существует... Запрос не может работать


Привет,

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

public bool Savedata(List<itemValues> lstitem)
       {

          string query = "IF EXISTS(SELECT ID from Item where ID=@ID)" +
                       "DELETE FROM Item WHERE ID=@ID;" +
                       "INSERT INTO Item(" +
                       "ItemName, " +
                       "Price, " +
                       "ID)  VALUES (" +
                       "@ItemName, " +
                       "@Price, " +
                       "@ID)";

           return Data.CreateItem(lstitem, query);
       }

public bool CreateItem(List<itemValues> lstitem, string query)
      {
          try
          {
              Connection Conn = new Connection();
              sqlCon = Conn.SqlConnection();

                  if (lstitem.Any())
                  {
                      foreach (var item in lstitem)
                      {

                          using (SqlCommand cmd = new SqlCommand(query, sqlCon))
                          {

                              cmd.CommandType = CommandType.Text;
                              cmd.Parameters.Add("@ItemName ", SqlDbType.VarChar).Value = item.itemName;
                              cmd.Parameters.Add("@Price", SqlDbType.Int).Value = item.Price;
                              cmd.Parameters.Add("@ID", SqlDbType.Int).Value = item.ID;

                              sqlCon.Open();
                              int rowsAffected = cmd.ExecuteNonQuery();

                              sqlCon.Close();
                          }

                      }


                  }
          }
          catch (Exception ex)
          {

              return false;
          }

          return true;
      }


Он не может проверить существующие данные, вставить все данные из списка в таблицу элементов.Как это решить?

Что я уже пробовал:

Я пытаюсь с помощью запроса If exists (...).

7 Ответов

Рейтинг:
59

OriginalGriff

Почему бы просто не использовать обновление?

string query = "UPDATE Item SET 
               "ItemName = @ItemName, " +
               "Price = @Price " +
               "where ID = @ID";


Рейтинг:
2

Suvendu Shekhar Giri

Я не видел много людей, делающих это.
Проблема здесь может быть связана с тем, что область действия не определена правильно.

Лучше всего было бы создать хранимую процедуру, которая может быть выполнена при одном вызове БД. Ваш хранимой процедуре, как должны выглядеть-

CREATE PROCEDURE myProcName
(
  @ID INT,
  @ItemName VARCHAR(50), -- or what ever as per your DB design
  @Price MONEY
)
AS
BEGIN
   IF EXISTS(SELECT ID from Item where ID=@ID)
   BEGIN
      DELETE FROM Item WHERE ID=@ID;

      INSERT INTO Item(ItemName, Price, ID)  
          VALUES (@ItemName, @Price, @ID)
   END
   --else condition goes here
END

Здесь утверждения должным образом блокируются с помощью BEGIN..END ключевые слова.

Однако вы также можете придерживаться своего подхода к параметризованным запросам, и в этом случае вам нужно сделать несколько вызовов в БД.
Подход может быть примерно таким-
-- Проверьте наличие данных в таблице только с помощью SELECT запросите и получите значение true/false.
--Если вы получаете истинное значение, то идите вперед, чтобы выполнить DELETE команда, а затем INSERT команда в другом командном объекте.

Надеюсь, это поможет :)


Рейтинг:
2

SanthoshBabu Mahimairaj

мы не можем достичь этого с помощью встроенного запроса или обычного SQL как то что вы пробовали лучше вы идете с хранимой процедурой PlSQL

CREATE PROCEDURE PrCheckAndSave
(
  @ID INT,
  @ItemName VARCHAR(100),
  @Price FLOAT
)
AS
IF EXISTS(SELECT ID from Item where ID=@ID)
 BEGIN 
       DELETE FROM Item WHERE ID=@ID

      INSERT INTO Item(ItemName,Price,ID) VALUES (@ItemName,@Price,@ID)
END


Просто вызовите PRCHECKANDSAVE SPC в свое приложение, которое может вам помочь


Рейтинг:
2

Harpreet05Kaur

ПРИВЕТ,
Ваша процедура должна состоять из двух операций
1. Обновление
2. Вставить

если (существует)
Начать
Инструкция update
конец

ещё
Начать
инструкция INSERT
конец


Рейтинг:
1

#realJSOP

Тебе это не нужно IF EXISTS - это излишне. Просто удалите запись и вставьте новую.

Однако на самом деле я бы сделал это именно так:

-- try to update the record
UPDATE	[mydatabase]
SET	ItemName = @itemName, Price = @price,
WHERE	ID = @ID;
-- if no record was updated, insert it	
IF (@@ROWCOUNT = 0)
    INSERT INTO [mydatabase](ID, ItemName, Price) VALUES (@ID, @itemName, @price);


Наконец, используйте SSME для проверки ваших запросов, прежде чем помещать их в код (или хранимую процедуру).


Suvendu Shekhar Giri

- Это правда ! Надо решить свою цель.
Мои 5!

Рейтинг:
1

Vaibhav-Systematix

Почему вы хотите удалить вы можете обновить эту конкретную запись

CREATE PROCEDURE <ProcedureName>
(
  @Id INT,
  @ItemName VARCHAR(50), 
  @Price MONEY
)
AS
BEGIN
   IF EXISTS(SELECT ID from Item where ID=@ID)
   BEGIN

   Update Item SET ItemName=@ItemName, Price=@Price WHERE ID=@Id

   END
END


Рейтинг:
0

Gaurav Raosaheb Raut

Забыл написать начало и конец блока, если он существует.
обратитесь к следующему запросу

"Если существует(выберите код из пункта, где id=@id), который начнет" +
"Удалить из элемента, где ID=@ID;" +
"Вставить в пункт (" +
"ItemName", +
"Цена, " +
"ID) ЗНАЧЕНИЯ (" +
"@ItemName", +
"@Цена, " +
"@ID) конец ";