В чем ошибка с моим условием выбора только показать Nvarchar не нуль при выборе для datagridview c #? - PullRequest
0 голосов
/ 03 февраля 2019

Я добавил новый столбец Nvarchar в таблицу пациентов для хранения арабских имен и его исправности, но когда я выбираю данные для просмотра данных с помощью хранимой процедуры, он показывает только строки с арабскими именами и не показывает строкиесли арабское имя равно нулю.

Ошибка в условии where, когда я добавил столбец Nvarchar к условию, он показывает в datagridview только строки со значением в новом столбце patient_Name_Arabic, но при удалении столбцаpatient_Name_Arabic из условия where, затем все данные, отображаемые в datagridview.

В чем ошибка и как показать все данные в datagridview, используя это условие где?

Это мойхранимая процедура:

ALTER PROCEDURE [dbo].[GET_ALL_PATIENTS]
    @ID VARCHAR(50)
AS
    SELECT 
        [Patient_No] as 'Medical Record No',
        patient_Name as 'Patient Name',
        age as 'Patient Age',
        Mobile as 'Patient Mobile',
        Email as 'Patient Email',
        Address,
        Gendername as 'Gender',
        Patient_id as 'Patient ID',
        natname as 'Nationality',
        patient_Name_Arabic as 'Arabic Name'
    FROM 
        Patients
    INNER JOIN 
        gender on gender.genderid = Patients.Gender
    INNER JOIN
        nationality on nationality.natid = Patients.natid
    WHERE 
        Patient_Name + patient_Name_Arabic + CONVERT(VARCHAR, [Age]) LIKE '%' + @ID + '%'

У меня есть текстовое поле поиска в моем приложении, мне нужно искать данные, но при первой загрузке мне нужно показать все данные в datagridview

Это код вызова параметра:

public DataTable GET_ALL_PATIENTS(string ID)
{
            DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
            DataTable dt = new DataTable();
            SqlParameter[] Param = new SqlParameter[1];
            Param[0] = new SqlParameter("@ID", SqlDbType.VarChar, 50);
            Param[0].Value = ID;
            dt = DAL.SelectData("GET_ALL_PATIENTS", Param);
            DAL.close();
            return dt;

        }

это код при открытии страницы

 this.patientsGrid.DataSource = patient.GET_ALL_PATIENTS("");

в чем ошибка, как решить эту проблему?

1 Ответ

0 голосов
/ 03 февраля 2019

Чтобы быть прямым на ваш вопрос, попробуйте это ISNULL(patient_Name_Arabic, N''):

ALTER PROCEDURE [dbo].[GET_ALL_PATIENTS]
    @ID NVARCHAR(50)
AS
    SELECT 
        [Patient_No] as 'Medical Record No',
        patient_Name as 'Patient Name',
        age as 'Patient Age',
        Mobile as 'Patient Mobile',
        Email as 'Patient Email',
        Address,
        Gendername as 'Gender',
        Patient_id as 'Patient ID',
        natname as 'Nationality',
        patient_Name_Arabic as 'Arabic Name'
    FROM 
        Patients
    INNER JOIN 
        gender on gender.genderid = Patients.Gender
    INNER JOIN
        nationality on nationality.natid = Patients.natid
    WHERE 
        Patient_Name + ISNULL(patient_Name_Arabic, N'') + CONVERT(VARCHAR, [Age]) LIKE '%' + @ID + '%'

Но, возможно, вам нужно переосмыслить свой запрос, чтобы избежать того этапа объединения, который может снизить производительность вашего запроса, или подуматьо создании сохраняемого вычисляемого столбца в вашей таблице.

Я думаю, проблема в том, что у вас есть строки с нулевым значением в этом столбце.Когда вы объединяете с другими столбцами, которые приводят к нулевому значению и (по умолчанию параметр CONCAT_NULL_YIELDS_NULL включен на сервере SQL), ваш запрос будет пропускать эти строки из вашего результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...