Member 12719658 Ответов: 2

Оператор C# SQL select-как изменить значение pulled?


Всем Привет -

Я надеюсь, что это правильный форум, чтобы спросить об этом. Я использую приведенный ниже код для извлечения значений из SQL в datagridview. Все работает хорошо, за исключением того, что я хотел бы, чтобы ячейка "значение" (которая либо вернется как 1, 2, либо 3) менялась при запросе результатов на Started, Stop, Stoping. Кроме того, если число значений не равно 1, 2 или 3, то я хотел бы, чтобы datagridview сказал "неизвестно"

Так, например, в моем столе я мог бы иметь:
Имя = Майк
Фамилия = Джонс
Значение = 1

Имя = Стив
Фамилия = Макдэниелдс
Значение = 3

Имя = Чад
Фамилия = Смит
Значение = 0

То, что я хотел бы показать datagridveiw, это:

Имя = Майк
Фамилия = Джонс
Значение = Начато

Имя = Стив
Фамилия = Макдэниелдс
Значение = Остановка

Имя = Чад
Фамилия = Смит
Значение = Неизвестно


Код, который я использую:
SqlConnection myConnection = new SqlConnection("Server=mylaptop; Database = users; User Id = test; Password = testpass;");


myConnection.Open();
           
SqlCommand objcmd = new SqlCommand("SELECT LastName, FirstName, Value, FROM table1 ", myConnection);

     
SqlDataAdapter adp = new SqlDataAdapter(objcmd);
DataTable dt = new DataTable();

adp.Fill(dt);
dataGridView1.DataSource = dt;


Надеюсь, кто-то сможет помочь и поблагодарить вас заранее.

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

Google, размещая операторы if then в коде, но не может понять, как это сделать.

2 Ответов

Рейтинг:
11

Maciej Los

В дополнение к решению 1 по P_Z[^], я бы предложил создать вспомогательную таблицу, например:

--create variable, type of Table
DECLARE @tmp TABLE([Value] INT, [Description] VARCHAR(150))

INSERT INOT @tmp ([Value], [Description])
VALUES(0, 'Unknow'), (1, 'Started'), (3, 'Stopped')

SELECT t1.LastName, t1.FirstName, t2.[Description]
FROM table1 t1 INNER JOIN @tmp t2 ON t1.[Value] = t2.[Value]


Обратите внимание, что вы можете создать реальную таблицу.

Примечание №2-удалить последнюю запятую, непосредственно перед FROM заявление.
SELECT LastName, FirstName, Value, FROM table1 


Для получения более подробной информации о присоединении к таблицам, пожалуйста, смотрите: Визуальное представление SQL-соединений[^]


P_Z

На самом деле я думаю, что таблица tmp должна использоваться для нормализации таблиц, верно?

Спасибо за 5*, ваше решение тоже имеет смысл

Maciej Los

Спасибо.

Member 12719658

Спасибо P_Z. Я принял ваше решение как лучшее, потому что мне нравится ваша идея создания временной таблицы для этого. Теперь мне нужно будет поискать, как поместить это в мой исходный код. :)

Еще раз спасибо P_Z. Я понял, как мне это сделать. Это было потрясающе и очень быстро, чтобы получить ответ. Это может быть закрыто, так как я использую ваше предложение. :)

Maciej Los

Член 12719658, я не P_Z...
В любом случае, спасибо.

Рейтинг:
1

P_Z

Вы можете установить значение из sql с помощью оператора case, например

SELECT 
LastName, 
FirstName, 
( case Value 
   when 1 then 'Started'
   when 2 then 'Stopped'
   when 3 then 'Stopping'
   else 'Unknown'
end ) as Status
FROM table1

Обратите внимание, что оператор case можно использовать для более сложного sql


Maciej Los

5ед!

Member 12719658

Итак, с вашим предложением это должно выглядеть так?

Sqlcommand, который objcmd = новая команда sqlcommand("выберите Фамилия, Имя, ( если стоимость
когда 1, то "началось"
когда 2 затем "остановились"
когда 3, то "остановка"
остальное "неизвестно"
end) as Status, FROM table1", myConnection);

Продолжает говорить ошибка на заливке (dt).

Member 12719658

Спасибо за быстрые ответы. Я обнаружил, что столбец "Value" является типом данных tinyint, который вызывает проблемы при попытке запуска оператора. Я пытаюсь придумать способ скопировать таблицу в другую таблицу, а затем запустить ее - как в ответе P_Z. Если у вас нет никаких предложений?