C# Asp.net Webforms simple SQL 查询 1 行多列变量

C# Asp.net Webforms simple SQL Query for 1 row several columns to variables

我一直在四处寻找,要么是我自己感到困惑,要么是没有找到正确的东西。

我有这个数据 reader 可以提取存储过程的一些信息..但我认为我做的不对。

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();
    }
}

我只需要根据员工 ID 查询一行。我宁愿不通过存储过程而是通过 select 查询。

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;

非常感谢任何帮助。谢谢。

如果没有TSQL逻辑,最好使用查询而不是存储过程

如果您只想使用查询而不是存储过程,只需将 SQL 语句传递给 Command 并将 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();
    }
}

如果查询可以 return 多行,您可以将 TOP 1 添加到带有 ORDER BY <some other field> 的查询以仅获取最相关的行。