Как показать значение, распечатанное запросом SQL в окне сообщения

Я хочу распечатать значение, которое возвращено SQL Server.

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama') 
   BEGIN   
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea')  
   END 
ELSE  
   BEGIN 
    Print 'Duplicate' 
   END

Этот запрос или возвратит меня или количество затронутых строк или Дубликат

Я хочу использовать этот Дубликат в C# в MessageBox.Show()

string query1 = "If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemName') BEGIN  INSERT INTO ItemList (ItemName) VALUES('txtItemName')  END ELSE  BEGIN Print 'Duplicate' END";
            SqlCommand cmd = new SqlCommand(query1, conn);
            SqlDataReader dr;
            conn.Open();
            dr=cmd.ExecuteReader();
            conn.Close();
MessageBox.Show(dr);

Я не знаю, как использовать dr сделать это. Выручите меня для печати Дубликата здесь

MessageBox. Покажите (доктор);

Что я должен сделать здесь?

8
задан T.Rob 28 November 2011 в 03:02
поделиться

1 ответ

С помощью ADO.NET есть четыре варианта возврата информации из SQL-запроса:

  • Использование объекта DataSet для сбора возвращаемых строк и работы с этими строками в дополнение к возвращаемым значениям и возвращаемым параметрам.
  • Используйте объект DataReader для сбора возвращаемых строк, перемещения по этим строкам, а также для сбора возвращаемых значений и возвращаемых параметров.
  • Используйте метод ExecuteScalar для возврата значения из первого столбца первой строки результатов с возвращаемыми значениями и возвращаемыми параметрами. Это наиболее полезно при работе с агрегированными функциями.
  • Используйте метод ExecuteNonQuery для возврата только возвращаемых параметров и возвращаемых значений. Любые возвращаемые строки отбрасываются. Это наиболее полезно для выполнения запросов действий.

Это все методы, вызываемые из командного объекта.

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

Чтобы получить возвращаемое значение из запроса, вы должны иметь возможность что-то вроде следующего на вашем C#

// add a new parameter, with any name we want - its for our own use only 
SqlParameter sqlParam = com.Parameters.Add("@ReturnValue", SqlDbType.Int); 
// set the direction flag so that it will be filled with the return value 
myParm.Direction = ParameterDirection.ReturnValue;

Код выше захватывает возвращаемое значение, которое вы можете установить как вам нужно, возможно с 0 для существующего и 1 для несуществующего.

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')    
   BEGIN      
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    Return 0;    
   END    
ELSE     
   BEGIN    
    Return 1;    
   END 

Однако, есть небольшая оговорка с вышеприведенным советом - обычно я использую ORM, такой как Linq-to-SQL или NHibernate, или я использую Stored Procedures. Я нахожу встроенный SQL довольно громоздким. Так что, хотя мой ответ должен быть в общем-то звуковым, вам, наверное, придется проработать некоторые детали, чтобы он работал именно так, как вам нужно

.
1
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: