IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pavel Polí Pražák:16.6.2016 15:16

Zdravím,
Mam velký problém co se týče převodu z databáze. Jde o to že mam vytvořený form po stisknutí tlačítka jse připojím do databáze následně otevřu .xlsx soubor a při plnění dat nastává problém,
pokud používám
oSheet.Cells[2, 1] = reader.GetStrin­g(0); funguje pouze s 0 ikdyž dat v databázi je více.

a pokud bych chtěl vyplňovat data automaticky po sloupcích podle databáze tak nevím jak mohl by mi prosím někdo poradit zdroják přikládám

using System;
using System.Collec­tions.Generic;
using System.Componen­tModel;
using System.Data;
using System.Data.SqlCli­ent;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threadin­g.Tasks;
using System.Window­s.Forms;
using Excel = Microsoft.Offi­ce.Interop.Ex­cel;

namespace VerifyWidowsForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeCom­ponent();
}

private void button1_Click(ob­ject sender, EventArgs e)
{

SqlConnection myCon = new SqlConnection(Ve­rifyWidowsFor­m.Properties.Set­tings.Default­.MySqlConecti­on);
String comand0 = ("SELECT[ts_O­perator] FROM [DIG_ENGINE_TES­T].[dbo].[tas­kstats]group by ts_Operator");
SqlCommand sqlcomand0 = new SqlCommand(comand0, myCon);
DataTable dt = new DataTable();
DataSet ds = new DataSet();

try
{
Microsoft.Offi­ce.Interop.Ex­cel.Applicati­on oXL;
Microsoft.Offi­ce.Interop.Ex­cel._Workbook oWB;
Microsoft.Offi­ce.Interop.Ex­cel._Worksheet oSheet;
Microsoft.Offi­ce.Interop.Ex­cel.Range oRng;

myCon.Open();
SqlDataReader reader = sqlcomand0.Exe­cuteReader();
while (reader.Read())
{

try
{
//Start Excel and get Application object.
oXL = new Microsoft.Offi­ce.Interop.Ex­cel.Applicati­on();
oXL.Visible = true;

//Get a new workbook.
oWB = (oXL.Workbook­s._Open("C:\\Tem­p\\VerDatabase­.xlsx", System.Reflec­tion.Missing.Va­lue,
System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue,
System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue,
System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue,
System.Reflec­tion.Missing.Va­lue, System.Reflec­tion.Missing.Va­lue));

oSheet = (Microsoft.Of­fice.Interop.Ex­cel._Worksheet)oW­B.Worksheets[1];
oSheet.Name = "Average Validate by Operator";

//Add table headers going cell by cell.
oSheet.Cells[1, 1] = "Operators";
oSheet.Cells[1, 2] = "Average Time";
oSheet.Cells[1, 3] = "Total Batches";

oSheet.Cells[2, 1] = reader.GetStrin­g(0);
//oSheet.Cells[3, 1] = reader.GetStrin­g(1);

oXL.Visible = false;
oXL.UserControl = false;
oWB.Save();

oWB.SaveAs("C:\\Tem­p\\VerDatabase­.xlsx", Microsoft.Offi­ce.Interop.Ex­cel.XlFileFor­mat.xlWorkbook­Default, Type.Missing, Type.Missing,
false, false, Microsoft.Offi­ce.Interop.Ex­cel.XlSaveAsAc­cessMode.xlNoChan­ge,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

oWB.Close();

}
catch (Exception)
{

throw;
}
reader.Close();
myCon.Close();

}
}
catch (Exception g)
{

Console.Write­Line(g.ToStrin­g());
}

}
}
}

 
Odpovědět
16.6.2016 15:16
Avatar
Odpovídá na Pavel Polí Pražák
Michal Štěpánek:17.6.2016 8:56

V první řadě používej tlačítko pro vložení kódu (druhé zleva), bo takhle je to strašně nepřehledný. Jestli jsem ten tvůj kód dobře pochopil, přijde mi, že při načítání dat otevíráš při každém průchodu cyklem nový excel, nemůže to být tím?

Nahoru Odpovědět
17.6.2016 8:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Pavel Polí Pražák:17.6.2016 10:11

Díky za první radu :) takže oprava.
Druhá rada tím si nejsem jistý vzhledem k tomu že při změně se soubor přepíše správně problém nastává v tom že nejsem schopný vzít celý sloupec po příkazu v SQL se vypíše 1 sloupec se 6 hodnotama a příkazem
oSheet.Cells[2, 1] = reader.GetStrin­g(0); vezmu první ale oSheet.Cells[3, 1] = reader.GetStrin­g(1); již nevezme druhou hodnotu ze sloupce je možné že to hledá druhý sloupec?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace VerifyWidowsForm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }



        private void button1_Click(object sender, EventArgs e)
        {



            SqlConnection myCon = new SqlConnection(VerifyWidowsForm.Properties.Settings.Default.MySqlConection);
            String comand0 = ("SELECT[ts_Operator]  FROM [DIG_ENGINE_TEST].[dbo].[taskstats]group by ts_Operator");

            SqlCommand sqlcomand0 = new SqlCommand(comand0, myCon);

            DataTable dt = new DataTable();
            DataSet ds = new DataSet();


            try
            {
                Microsoft.Office.Interop.Excel.Application oXL;
                Microsoft.Office.Interop.Excel._Workbook oWB;
                Microsoft.Office.Interop.Excel._Worksheet oSheet;
                Microsoft.Office.Interop.Excel.Range oRng;


                myCon.Open();
                SqlDataReader reader = sqlcomand0.ExecuteReader();
                while (reader.Read())
                {


                    try
                    {
                        //Start Excel and get Application object.
                        oXL = new Microsoft.Office.Interop.Excel.Application();
                        oXL.Visible = true;

                        //Get a new workbook.
                        oWB = (oXL.Workbooks._Open("C:\\Temp\\VerDatabase.xlsx", System.Reflection.Missing.Value,
           System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
           System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
           System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
           System.Reflection.Missing.Value, System.Reflection.Missing.Value));



                        oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.Worksheets[1];
                        oSheet.Name = "Average Validate by Operator";

                        //Add table headers going cell by cell.
                        oSheet.Cells[1, 1] = "Operators";
                        oSheet.Cells[1, 2] = "Average Time";
                        oSheet.Cells[1, 3] = "Total Batches";


                        int row = 2;
                        int column = 1;
                        List<string> allSSN = new List<string>();


                        var tableSchema = reader.GetSchemaTable();

                        string ssn = reader.GetString(0);
                        allSSN.Add(ssn);
                        foreach (var item in allSSN)
                        {
                            oSheet.Cells[row++, column] = item;
                            reader.NextResult();
                        }

                        oXL.Visible = false;
                        oXL.UserControl = false;
                        oWB.Save();

                        oWB.SaveAs("C:\\Temp\\VerDatabase.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
                           false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                        oWB.Close();

                    }
                    catch (Exception)
                    {

                        throw;
                    }
                    reader.Close();
                    myCon.Close();


                }
            }
            catch (Exception g)
            {

                Console.WriteLine(g.ToString());
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}
 
Nahoru Odpovědět
17.6.2016 10:11
Avatar
jozef_i
Člen
Avatar
jozef_i:17.6.2016 10:58

V SQL Select je len jeden stĺpec vybratý, jeto v poriadku? reader.GetString(1) chce čítať z druhého stĺpca....

 
Nahoru Odpovědět
17.6.2016 10:58
Avatar
Odpovídá na Pavel Polí Pražák
Michal Štěpánek:17.6.2016 12:35

Pokud chceš vypisovat hodnoty jen z prvního sloupce musí být vždycky s indexem 0 a při projití tím cyklem

while(reader.Read()){}

to pokaždé vezme hodnotu z prvního sloupce ale z dalšího řádku.
Já používám zápis ve stylu

string hodnota = reader[0].ToString();
Editováno 17.6.2016 12:38
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.6.2016 12:35
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Pavel Polí Pražák:20.6.2016 13:46

Díky moc ,
už jsem to vyřešil a to i díky tvé radě :)
ještě jednou dík.

 
Nahoru Odpovědět
20.6.2016 13:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.