Нужна помощь с подключением к базе данных и кодом запроса - PullRequest
0 голосов
/ 23 июня 2010

В моем коде ниже, cmdquery работает, но hrquery нет. Как получить другой запрос для заполнения вида сетки? Нужно ли устанавливать новое соединение или использовать такое же соединение? Ребята, вы можете мне помочь? Я новичок в C # и ASP. Вот код спагетти, который я собрал. Все это может быть неправильно, так что если у вас есть лучший способ сделать это, не стесняйтесь поделиться.

if (Badge != String.Empty)
{
    string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'";
    string hrquery = "SELECT CLOCK_IN_TIME, CLOCK_OUT_TIME FROM CLOCK_HISTORY   WHERE Badge ='" + Badge + "'";

    OracleCommand cmd = new OracleCommand(cmdquery);
    cmd.Connection = conn;
    cmd.CommandType = CommandType.Text;
    conn.Open();

    OracleDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
        this.xUserNameLabel.Text += reader["EMPLOYEE_NAME"];
        this.xDepartmentLabel.Text += reader["REPORT_DEPARTMENT"];               
    }

    OracleCommand Hr = new OracleCommand(hrquery);
    Hr.Connection = conn;
    Hr.CommandType = CommandType.Text;

    OracleDataReader read = Hr.ExecuteReader();

    while (read.Read())
    {
        xHoursGridView.DataSource = hrquery;
        xHoursGridView.DataBind();
    }
}
conn.Close();

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Ваш код доступа к данным обычно должен выглядеть следующим образом:

string sql = "SELECT * FROM Employee e INNER JOIN Clock_History c ON c.Badge = e.Badge WHERE e.Badge = @BadgeID";
using (var cn = new OracleConnection("your connection string here"))
using (var cmd = new OracleCommand(sql, cn))
{
    cmd.Parameters.Add("@BadgeID", OracleDbType.Int).Value = Badge;

    cn.Open();

    xHoursGridView.DataSource = cmd.ExecuteReader();
    xHoursGridView.DataBind();
}

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

Что касается вопроса о подключении, существуют исключения, но обычно выиспользуйте соединение для одного активного набора результатов за раз.Таким образом, вы можете повторно использовать тот же объект conn из исходного кода, но только после того, как вы полностью закончили с ним из предыдущей команды.Также можно открыть два соединения, если они вам нужны.Тем не менее, best опция заключается в объединении связанных запросов в один SQL-оператор, когда это возможно.

0 голосов
/ 23 июня 2010

Я даже не собираюсь вдаваться в то, как вы должны использовать using s и методы: p

if (Badge != String.Empty)
    {

        string cmdquery = "SELECT * from Employees WHERE Badge ='" + Badge + "'";
        string hrquery = "SELECT CLOCK_IN_TIME, CLOCK_OUT_TIME FROM CLOCK_HISTORY   WHERE Badge ='" + Badge + "'";

        OracleCommand cmd = new OracleCommand(cmdquery);
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        conn.Open();

        OracleDataReader reader = cmd.ExecuteReader();


            while (reader.Read())
            {
                this.xUserNameLabel.Text += reader["EMPLOYEE_NAME"];
                this.xDepartmentLabel.Text += reader["REPORT_DEPARTMENT"];

            }


            OracleCommand Hr = new OracleCommand(hrquery);
            Hr.Connection = conn;
            Hr.CommandType = CommandType.Text;


            OracleDataReader read = Hr.ExecuteReader();

            //What's this next line? Setting the datasource automatically
            // moves through the data.
            //while (read.Read())
            //{
                                          //I changed this to "read", which is the
                                          //datareader you just created.
                xHoursGridView.DataSource = read;
                xHoursGridView.DataBind();
            //}


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