1 Востаннє редагувалося milofaq (11.04.2013 17:44:32)

Тема: C# + firebird + console app

Усім привіт , почав вчити .Net Прошу допомогти у вирішенні проблемки. Найшов в неті нижче вказаний код, але при компіляції він показує тільки значення поля 0 або 1 або 2 в задежності від цифри в дужках  object dataValue = reader.GetValue(2);

структура таблиці PEOPLE

0      1           2                       3
ID    name      surname           date
1       igor         vasilkov          01.02.03
2       ivan         moroz            06.03.04


а потрібно щоб вконсолі показало вміст всієї таблиція, наприклад
1       igor         vasilkov          01.02.03
2       ivan         moroz            06.03.04
3
4
5

____________________________________________________________________________________________

using System;
using System.Data;
using FirebirdSql.Data.FirebirdClient;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace FirebirdTest
{
    class MainClass
    {
    
        public static void Main(string[] args)
        {
            string connectionString =
                "Database=C:\\Program Files (x86)\\FortNet\\db\\FORTNET.fdb;" +
                    "User=SYSDBA;" + "Password=masterkey;" +
                    "Dialect=3;character set=NONE;" + "Server=localhost";
            IDbConnection dbcon = new FbConnection(connectionString);
            dbcon.Open();
            IDbCommand dbcmd = dbcon.CreateCommand();
            string sql = "select * from PEOPLE";
            
            dbcmd.CommandText = sql;
            IDataReader reader = dbcmd.ExecuteReader();
            while (reader.Read())
            {
                object dataValue = reader.GetValue(3);
                string sValue = dataValue.ToString();
                Console.WriteLine("Value: " + sValue);
            }            
            Console.ReadKey();
            // clean up
            
        }

    }
}
Post's attachments

+++++++++++++.jpg 38.37 kb, 297 downloads since 2013-04-11 

2

Re: C# + firebird + console app

IDataReader має властивість Depth,  яка містить кількість стовпчиків в таблиці. Тому просто ще один цикл всередині:

for (int i = 1; i <= reader.Depth; i++) {
    object data = reader.GetValue(i);
}
Подякували: milofaq1

3

Re: C# + firebird + console app

дякую , попробую

4 Востаннє редагувалося milofaq (11.04.2013 17:13:19)

Re: C# + firebird + console app

не можу розібрати куда цей кусок коду вставити. видає той самий результат. Підскажіть буд ласка.

PS треба було мені з чогось простішого починати розбиратися

5

Re: C# + firebird + console app

Всередині циклу while :)
Але ще всеридину потрібно додати:

string sValue = dataValue.ToString();                
Console.WriteLine("Value: " + sValue);
Подякували: milofaq1

6 Востаннє редагувалося milofaq (11.04.2013 17:43:49)

Re: C# + firebird + console app

while (reader.Read())
            {
               object dataValue = reader.GetValue(0);      
              //   string sValue = dataValue.ToString();
              //   Console.WriteLine("Value: " + sValue);

                for (int i = 1; i <= reader.Depth; i++)
                {
                    string sValue = dataValue.ToString();
                    Console.WriteLine("Value: " + sValue);
                    object data = reader.GetValue(i);
                    
                }

            }

в такому випадку просто чорний екран в консолі і більше нічого :(

7

Re: C# + firebird + console app

допомогло таке

string sValue = "";
sValue += reader.GetValue(0).ToString()+" ";
sValue += reader.GetValue(1).ToString()+" ";
sValue += reader.GetValue(2).ToString()+" ";
sValue += reader.GetValue(3).ToString();

але ще треба зробити так щоб відображалося в результаті останніх 25 строк таблиці і щоб дані обновлялися 1 раз в секунду, бо в цю таблиці з певною періодичністю дописуються стрічки з новими записами

8 Востаннє редагувалося truesupport (11.04.2013 22:44:56)

Re: C# + firebird + console app

ти можеш написати інший sql запит наприклад такий

SELECT TOP 25 * FROM PEOPLE ORDER BY ID DESC

На рахунок щоб дані обновлялись 1 раз в секунду мені здається що можна використати
System.Windows.Threading.DispatcherTimer
там є івент тік і ваш код можна виконувати підписавшись на цей івент. Можливо є простіший спосіб але я використовував тільки цей.

Подякували: Replace1