не может прочитать информацию о поле из базы данных доступа при использовании OleDbDataReader в C # - PullRequest
0 голосов
/ 07 марта 2012

я написал программу на языке C # для чтения / записи в базу данных доступа. в нем у меня есть 2 таблицы: пользователь и элемент следующий код должен был прочитать специальное поле из таблицы User и вернуть его мне на основе номера поля но я не могу заставить его работать по какой-то причине ... помощь будет хорошей в этот момент (4 утра)

 public string UserGetField(int user_id,int field)
        {
            string found="";
            string command="";
            switch (field)
            {
                case 1://first_name
                    command+= "first_name";
                    break;
                case 2://last_name
                      command+= "last_name";
                    break;
                case 3://grade
                      command+= "grade";
                    break;
                case 4://phone
                      command+= "phone";
                    break;
                case 5://address
                      command+= "address";
                    break;
                case 6://item
                    command += "item";
                    break;
            }
            cmd.CommandText = "select '" + command + "' from User where user_id = '" + user_id + "'";
            con.Open(); // open the connection
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                found += dr["first_name"].ToString();
            }
            con.Close();
            return found;
        }

Ответы [ 3 ]

0 голосов
/ 07 марта 2012

Попробуйте это?

    public string UserGetField(int user_id, int field)
    {
        var columns = new string[] { "first_name", "last_name", "grade", "phone", "address", "item" };

        var list = new List<string>();
        string command = columns[field - 1];
        var sql = string.Format("select '{0}' from User where user_id = '{1}'", command, user_id);
        var conStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Directory.GetCurrentDirectory() + @"\test.mdb"; //

        using (var conn = new OleDbConnection(conStr))
        {
            conn.Open();
            var cmd = new OleDbCommand(sql, conn);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                list.Add(dr[command].ToString());
            }
        }
        return string.Join(",", list.ToArray());
    }
0 голосов
/ 07 марта 2012

это последняя версия, которая работает ... свернула из таблицы с именем User to Kids и внесла другие изменения

 public string UserGetField(int user_id,int field)
        {
            string found="";
            string command="";
            switch (field)
            {
                case 1://first_name
                    command+= "first_name";
                    break;
                case 2://last_name
                      command+= "last_name";
                    break;
                case 3://grade
                      command+= "grade";
                    break;
                case 4://phone
                      command+= "phone";
                    break;
                case 5://address
                      command+= "address";
                    break;
                case 6://item
                    command += "item";
                    break;
            }
            cmd.CommandText = "SELECT " + command + " FROM Kids WHERE user_id = " + user_id + "";
            con.Open(); // open the connection
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                found = dr[command].ToString();      
            }
            con.Close();
            return found;
        }
0 голосов
/ 07 марта 2012

попробуйте это:

    cmd.CommandText = "select [" + command + "] from User where user_id = '" + user_id + "'";

Кроме того, вы динамически выбираете поле выбора, но всегда ищете поле first_name в результате. Изменить на

        while (dr.Read())
        {
            found += dr[0].ToString();  // first field value
        }
...