Код C# для проверки наличия данных одного столбца из таблицы в других таблицах
Я очень ценю если кто нибудь мне поможет я запутался я хочу проверить одну запись из таблицы а чтобы проверить существует ли она в другой таблице В.
Я подсчитываю, сколько данных было введено в таблицу B.
Я пробовал много раз, но это не работает.
например:
A B ------------------------------ John John Joon Jorge Jorge Joon Elizabet Elizabet Suzan Suzan Elizabet Joon Suzan John Elizabet
Ответ должен быть таким:
John = 2 Joon = 2 jorge = 1 Elizabet = 3 Suzan = 2
Что я уже пробовал:
using (ImportInvoiceMasterForm.ApplicationSqlConnection2 = new SqlConnection(MainForm.ApplicationDataBase)) { ImportInvoiceMasterForm.ApplicationSqlConnection2.Open(); using (ImportInvoiceMasterForm.ApplicationSqlCommand1 = new SqlCommand("SELECT * FROM TBL_Stock_Item", ImportInvoiceMasterForm.ApplicationSqlConnection2)) using (ImportInvoiceMasterForm.ApplicationSqlDataReader1 = ImportInvoiceMasterForm.ApplicationSqlCommand1.ExecuteReader()) { while (ImportInvoiceMasterForm.ApplicationSqlDataReader1.Read()) { ImportInvoiceMasterForm.GetImportQuantity = 0; #region Get Import Quantity using (ImportInvoiceMasterForm.ApplicationSqlConnection1 = new SqlConnection(MainForm.ApplicationDataBase)) { ImportInvoiceMasterForm.ApplicationSqlConnection1.Open(); using (ImportInvoiceMasterForm.ApplicationSqlCommand = new SqlCommand("SELECT * FROM TBL_Import_Items WHERE ImportItemName='" + ImportInvoiceMasterForm.ApplicationSqlDataReader1.GetString(1) + "'", ImportInvoiceMasterForm.ApplicationSqlConnection1)) using (ImportInvoiceMasterForm.ApplicationSqlDataReader = ImportInvoiceMasterForm.ApplicationSqlCommand.ExecuteReader()) { while (ImportInvoiceMasterForm.ApplicationSqlDataReader.Read()) { GetImportQuantity += double.Parse(ImportInvoiceMasterForm.ApplicationSqlDataReader.GetValue(4).ToString()); } } } #endregion Get Import Quantity } } }
Eric Lynch
Более эффективным средством достижения этой же цели может быть использование объединения и группирования по столбцам, которые являются общими для двух таблиц. Поскольку вы не включаете много имен столбцов в свой запрос, трудно привести хороший пример, но что-то вроде следующего:
выбранная категория.CategoryID, COUNT(категории.CategoryID) как RowCount из продуктов
Левое внешнее соединение категорий с категориями.Кодтипа=Товары.CategoryID
Группировка по категориям.CategoryID
Если вы не хотите нулевых отсчетов, вы можете использовать Левое внутреннее соединение вместо этого.
Karam Ibrahim
Дорогой Эрик, я хочу использовать это утверждение о SELECT также я хочу использовать RowCount позже в коде C#. куда я могу его положить.
Gerry Schmitz
Выберите из A, где "имя" находится в B.
Затем выберите счетчик, сгруппированный по имени из предыдущего результата.
Richard Deeming
"SELECT * FROM TBL_Import_Items WHERE ImportItemName='" + ImportInvoiceMasterForm.ApplicationSqlDataReader1.GetString(1) + "'"
Не делай этого так!
Если пользователи имеют какой-либо контроль над содержимым таблицы запасов, ваш код будет уязвим для SQL-инъекция[^].
НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
using (ImportInvoiceMasterForm.ApplicationSqlCommand = new SqlCommand("SELECT * FROM TBL_Import_Items WHERE ImportItemName=@ImportItemName", ImportInvoiceMasterForm.ApplicationSqlConnection1)) { ImportInvoiceMasterForm.ApplicationSqlCommand.Parameters.AddWithValue("@ImportItemName", ImportInvoiceMasterForm.ApplicationSqlDataReader1.GetString(1)); }