C# Asp. net Webforms просто SQL Запрос для 1 строки, нескольких столбцов для переменных - PullRequest
0 голосов
/ 03 апреля 2020

Я искал вокруг, и я либо сбиваю с толку, либо не ищу нужную вещь.

У меня есть этот считыватель данных, который извлекает некоторую информацию для процедуры хранения ... но я не думаю, что я Я делаю это правильно.

string constr = ConfigurationManager.ConnectionStrings["PAYROLL"].ConnectionString;

using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand("DLI_EMPLOYEE_PORTAL_EMPLOYEE_INFORMATION"))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@EID", Session["sessionEMPID"].ToString());
        cmd.Connection = con;

        con.Open();
        SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        while (dataReader.Read())
        {
            string EMP_FIRST = dataReader["FIRST_NAME"].ToString();
            string EMP_LAST = dataReader["LAST_NAME"].ToString();
            string EMP_DEPT = dataReader["DEPT"].ToString();
            string EMP_DEPT_ID = dataReader["DEPT_ID"].ToString();

            body = body + "<p>SUBMITTED BY : (" + Session["sessionEMPID"].ToString() + ") " + EMP_FIRST + " " + EMP_LAST + " - DEPT : " + EMP_DEPT + "</p> " + System.Environment.NewLine;
        }

        con.Close();
    }
}

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

SELECT e.FIRST_NAME, e.LAST_NAME, e.DEPT_ID, d.NAME 
FROM EMPLOYEE AS e 
INNER JOIN DEPARTMENT AS d ON e.DEPT_ID = d.ID 
WHERE (e.ID = 'sim01')

Я строю HTML строку тела, поэтому мне нужна информация.

body = body + "<p>SUBMITTED BY : (" + Session["sessionEMPID"].ToString() + ") " + EMP_FIRST + " " + EMP_LAST + " - DEPT : " + EMP_DEPT + "</p> " + System.Environment.NewLine;

Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Если все, что вы хотите сделать, это использовать запрос вместо хранимой процедуры, просто передайте свой оператор SQL команде и установите для CommandType значение Text. Если вы ожидаете только одну строку, используйте if (dataReader.Read() вместо while (dataReader.Read()).

string constr = ConfigurationManager.ConnectionStrings["PAYROLL"].ConnectionString;

using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand(
        "SELECT e.FIRST_NAME, e.LAST_NAME, e.DEPT_ID, d.NAME " + 
        "FROM EMPLOYEE AS e " +
        "INNER JOIN DEPARTMENT AS d ON e.DEPT_ID = d.ID " + 
        "WHERE (e.ID = @EID)"));
    {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@EID", Session["sessionEMPID"].ToString());
        cmd.Connection = con;

        con.Open();
        SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        if (dataReader.Read())
        {
            string EMP_FIRST = dataReader["FIRST_NAME"].ToString();
            string EMP_LAST = dataReader["LAST_NAME"].ToString();
            string EMP_DEPT = dataReader["DEPT"].ToString();
            string EMP_DEPT_ID = dataReader["DEPT_ID"].ToString();

            body = body + "<p>SUBMITTED BY : (" + Session["sessionEMPID"].ToString() + ") " + EMP_FIRST + " " + EMP_LAST + " - DEPT : " + EMP_DEPT + "</p> " + System.Environment.NewLine;
        }

        con.Close();
    }
}

Если запрос может вернуть более одной строки, вы можете добавить TOP 1 к запросу с ORDER BY <some other field> захватить только самый подходящий.

0 голосов
/ 01 мая 2020

Лучше использовать запрос вместо хранимой процедуры, если нет T SQL logi c

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