Я разрабатываю медицинскую лабораторную систему в приложении c # windows,
У меня есть эта проблема, когда я делаю лабораторный запрос для пациентов и выбираю необходимые тесты, которые мне нужно дать одинаковые (sample_Id) для каждого теста, если тест(sample_kind) и (отдела_ид) одинаковы,
и дают следующее (sample_id), если (sample_kind) и (отдел_ид) не совпадают для этого теста (см. Прикрепленное изображение для более подробной информации)
Например: строки с идентификаторами тестов 2 и 4 имеют одинаковый S-ID (sample_kind) и одинаковый D-ID (департамент_id) будут принимать один и тот же sample_id.
также тестовые идентификаторы 5 и 6 имеют одинаковый S-ID (sample_kind) и тот же D-ID (отдел_ид) будет принимать тот же sample_id.
также следующий тестовый идентификатор 16 строки: эта строка будет принимать следующий номер sample_id.
наконец, последний идентификатор теста строки 10 будет принимать последний sample_id.
В этом примере мне нужно сгенерировать новый 4 sample_id в зависимости от этого сравнения.
Я пробовал следующий код, но егогенерация саmple_id для каждой строки:
private void btnSave_Click(object sender, EventArgs e)
{
int x;
txtSampleNo.Text = sample.GET_LAST_SAMPLE_ID().Rows[0][0].ToString();
bool xsample = int.TryParse(txtSampleNo.Text, out x);
if (xsample)
{
for (int i = 0; i < TestsDataGrid.Rows.Count-1; i++)
{
int sample_kind = Convert.ToInt32(TestsDataGrid.Rows[i].Cells[7].Value);
int deptartment_id = Convert.ToInt32(TestsDataGrid.Rows[i].Cells[9].Value);
// if sample_kind and department_id are same for the rows then insert data and give same sample_no for each row else insert data and give next sample number
sample.ADD_HEMATOLOGY_SAMPLES(x, Convert.ToInt32(textCashOrder.Text), 1, Convert.ToInt32(textPatientID.Text),
textInvoice.Text, DateTime.Parse(OrderDate.Value.ToString()), DateTime.Parse(OrderDate.Value.ToString()), 1, "",
"", "", Convert.ToInt32(TestsDataGrid.Rows[i].Cells[7].Value), Convert.ToInt32(TestsDataGrid.Rows[i].Cells[9].Value));
sample.ADD_HEMATOLOGY_SAMPLES_DETAILS(x,
Convert.ToInt32(textCashOrder.Text),
Convert.ToInt32(TestsDataGrid.Rows[i].Cells[0].Value),
Convert.ToInt32(TestsDataGrid.Rows[i].Cells[0].Value),
Convert.ToInt32(TestsDataGrid.Rows[i].Cells[7].Value));
x = x + 1;
txtSampleNo.Text = x.ToString();
}
}
sample.UPDATE_HEMATOLOGY_COUNTER(Convert.ToInt32(txtSampleNo.Text));
}
Это хранимые процедуры в SQLSERVER:
ALTER proc [dbo].[ADD_HEMATOLOGY_SAMPLES]
@SAMPLE_ID int,
@ORDER_ID int,
@CUSTID int,
@PATIENT_NO int,
@INVOICE_ORDER_NO varchar(50),
@COLLECTION_DATE datetime,
@RECEIVING_DATE datetime,
@SAMPLE_STATUS int,
@SAMPLE_NOTE varchar(100),
@COLLECTED_BY varchar(50),
@RECEIVED_BY varchar(50),
@SAMPLE_KIND int,
@DEPTID int
as
INSERT INTO Lab_Hematology_Samples
([SAMPLE_ID]
,[ORDER_ID]
,[CUSTID]
,[PATIENT_NO]
,[INVOICE_ORDER_NO]
,[COLLECTION_DATE]
,[RECEIVING_DATE]
,[SAMPLE_STATUS]
,[SAMPLE_NOTE]
,[COLLECTED_BY]
,[RECEIVED_BY]
,[sample_kind]
,[deptid])
VALUES
(@SAMPLE_ID
,@ORDER_ID
,@CUSTID
,@PATIENT_NO
,@INVOICE_ORDER_NO
,@COLLECTION_DATE
,@RECEIVING_DATE
,@SAMPLE_STATUS
,@SAMPLE_NOTE
,@COLLECTED_BY
,@RECEIVED_BY
,@SAMPLE_KIND
,@DEPTID)
ALTER proc [dbo].[ADD_HEMATOLOGY_SAMPLES_DETAILS]
@SAMPLE_ID int,
@ORDER_ID int,
@TESTID int,
@GROUPID int,
@SAMPLE_KIND int
as
INSERT INTO [dbo].[Lab_Hematology_Samples_Details]
([SAMPLE_ID]
,[ORDER_ID]
,[TESTID]
,[GROUPID]
,SAMPLE_KIND)
VALUES
(@SAMPLE_ID
,@ORDER_ID
,@TESTID
,@GROUPID
,@SAMPLE_KIND)
Как выполнить сравнение для каждой строки перед вставкой данных идать одинаковые sample_id IF столбцы sample_kind (S-ID) и департамент_ид (D-ID) одинаковые ELSE дать следующий sample_id для строк, если столбцы sample_kind (S-ID) и отдел_ид (D-ID) отличаются в строке.
И как лучше сравнить производительность и скорость в приложении C # или с ХРАНЕННЫМИ ПРОЦЕДУРАМИ в SQL SERVER?