Diskuze: Export SQL databáze do Ecelu

C# .NET .NET (C# a Visual Basic) Export SQL databáze do Ecelu American English version English version

Avatar
Pavel Polí Pražák:

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. června 15:16
Avatar
Odpovídá na Pavel Polí Pražák
Michal Štěpánek:

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. června 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:

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. června 10:11
Avatar
jozef_i
Člen
Avatar
jozef_i:

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. června 10:58
Avatar
Odpovídá na Pavel Polí Pražák
Michal Štěpánek:

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. června 12:38
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 17. června 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:

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. června 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.