Как записать значение из ячейки таблицы в переменную?

Рейтинг: 0Ответов: 2Опубликовано: 14.04.2023

Имеется база данных в ssms и 6 таблиц. В данный момент работаю с таблицей "Продажи", в которой есть поля "Код товара" и "Цена", и таблицей "Товары" в которой есть "Код товара", "Цена".

В C# в форме таблицы "Продажи", есть comboBox, в который записываются "Коды товаров", и textBox "Цена".

Хочу получить значение "Цена" из таблицы "Товары" и записать его в textBox "Цена" на форме.

Как мне сохранить значение цены в переменную? Запрос для ssms я знаю как сделать, но не понимаю как его результат записать в переменную. Помогите пожалуйста.

Ответы

▲ 0

Решил вопрос с помощью ExecuteScalar(). Пример кода, может кому понадобиться:

int index = idOrder.SelectedIndex;
index = index + 1;
waxom.openConnection();
string stringQuery = $"select цена from товары where кодТовара = '{index}'";
SqlCommand cmd = new SqlCommand(stringQuery, 
waxom.getConnection());
int numCost = (Int32)cmd.ExecuteScalar();
waxom.closeConnection();

index - Код товара, выбранного в comboBox. Прибавляем к нему 1, тк отсчет идет с 0, а в бд с 1. Далее открываем соединение с бд. Передаем запрос SqlCommand. Сохраняем полученное значение в переменную numCost и закрываем соединение.

▲ 0

Я так понимаю ты новичок и тебе нужно просто понять некоторые концепты и ключевые термины.

SSMS - это на самом деле просто оболочка для доступа к самой базе данных которая Sql Server.

Точно так же как сама SSMS подключается к БД, твоя программа сначала должна подключится к этой же БД. Подключение осуществляется через драйвер, он уже есть готовый для Sql Server в составе фреймворка. Для подключения к БД используется строка которая так называется Connection String она у разных баз разного формата. Например она может выглядеть примерно так: "server=MSSQLSERVER;database=Sales;Trusted_Connection=true"

В фреймворке также есть набор классов ADO.NET которые являются оберткой над драйверами и позволяются удобно делать запросы к БД.

После того как ты подключишся к базе у тебя появляется соединение (примерно как если ты подключился к БД в SSMS). В это соединение можно начинать отправлять запросы и получать в ответ данные (так же как ты пишешь запросы в SSMS, только уже вызова функции).

Пример установки соединения и выполнения запроса отсюда:

using System;
using DT = System.Data;
using QC = Microsoft.Data.SqlClient;
  
namespace ProofOfConcept_SQL_CSharp  
{  
    public class Program  
    {  
        static public void Main()  
        {  
            using (var connection = new QC.SqlConnection(  
                "Server=tcp:YOUR_SERVER_NAME_HERE.database.windows.net,1433;" +
                "Database=AdventureWorksLT;User ID=YOUR_LOGIN_NAME_HERE;" +
                "Password=YOUR_PASSWORD_HERE;Encrypt=True;" +
                "TrustServerCertificate=False;Connection Timeout=30;"  
                ))  
            {  
                connection.Open();  
                Console.WriteLine("Connected successfully.");  
  
                Program.SelectRows(connection);  
  
                Console.WriteLine("Press any key to finish...");  
                Console.ReadKey(true);  
            }  
        }  
  
        static public void SelectRows(QC.SqlConnection connection)  
        {  
            using (var command = new QC.SqlCommand())  
            {  
                command.Connection = connection;  
                command.CommandType = DT.CommandType.Text;  
                command.CommandText = @"  
SELECT  
    TOP 5  
        COUNT(soh.SalesOrderID) AS [OrderCount],  
        c.CustomerID,  
        c.CompanyName  
    FROM  
                        SalesLT.Customer         AS c  
        LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh  
            ON c.CustomerID = soh.CustomerID  
    GROUP BY  
        c.CustomerID,  
        c.CompanyName  
    ORDER BY  
        [OrderCount] DESC,  
        c.CompanyName; ";  
  
                QC.SqlDataReader reader = command.ExecuteReader();  
  
                while (reader.Read())  
                {  
                    Console.WriteLine("{0}\t{1}\t{2}",  
                        reader.GetInt32(0),  
                        reader.GetInt32(1),  
                        reader.GetString(2));  
                }  
            }  
        }  
    }  
}  
/**** Actual output:  
Connected successfully.  
1       29736   Action Bicycle Specialists  
1       29638   Aerobic Exercise Company  
1       29546   Bulk Discount Store  
1       29741   Central Bicycle Specialists  
1       29612   Channel Outlet  
Press any key to finish...  
****/

Вот ещё видео в котором основные моменты рассмотрены.