To jeszcze jedno pytanie w tym temacie. Mając poniższy kod:
SqlConnection connection = new SqlConnection(@"SERVER=SRV; USER ID=sa; PASSWORD=12345; DATABASE=CDNXL_2012; CONNECTION RESET = FALSE");
//SqlConnection connection = new SqlConn ection(ConfigurationManager.ConnectionStrings["2012ConnectionString"].ConnectionString);
public Aktualizator()
{
InitializeComponent();
}
public void importdatafromexcel(string excelfilepath)
{
string sqltable = "dbo.LK_Prog_TwrAktualizacja";
string myexceldataquery = "select Kod, Nazwa, Nazwa1, SAP, EAN, Rodzaj, Kategoria, Marka, Grupa, Producent, Waga, CenaKatalogowa, GrupaDrzewo, PCN, URL, KategoriaRynkowa, ProductManager, Archiwalny FROM [Towary$]";
try
{
string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + excelfilepath + "';Extended Properties='Excel 8.0;HDR=yes;IMEX=1'";
//string sqlconnectionstring = "SERVER=SRV; USER ID=sa; PASSWORD=12345; DATABASE=CDNXL_2012; CONNECTION RESET = FALSE";
string cleartable = "DELETE FROM " + sqltable;
SqlConnection sqlconnection = new SqlConnection(ConfigurationManager.ConnectionStrings["2012ConnectionString"].ConnectionString);
SqlCommand sqlcmd = new SqlCommand(cleartable, sqlconnection);
sqlconnection.Open();
sqlcmd.ExecuteNonQuery();
sqlconnection.Close();
OleDbConnection excelconnection = new OleDbConnection(excelconnectionstring);
OleDbCommand OLEDBCMD = new OleDbCommand(myexceldataquery, excelconnection);
excelconnection.Open();
OleDbDataReader dr = OLEDBCMD.ExecuteReader();
SqlBulkCopy BULKCOPY = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["2012ConnectionString"].ConnectionString);
BULKCOPY.DestinationTableName = sqltable;
while (dr.Read())
{
BULKCOPY.WriteToServer(dr);
}
excelconnection.Close();
}
catch (Exception EX)
{
MessageBox.Show(EX.ToString());
}
}
Co przeoczyłem, że linię:
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["2012ConnectionString"].ConnectionString)
mogę zastosować w funkcji importdatafromexcel, a gdy chcę użyć jej wyżej, zamiast bezpośredniego podawania stringu połączenia, dostaję "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu"?
EDIT:
Jeśli ktoś będzie to przeglądał i natrafi na podobny problem - chodziło o nazwę. W konfiguracji mam "AktualizatorTowarowy.Properties.Settings.2012ConnectionString", a próbowałem użyć "2012ConnectionString". No i nie mogę zastosować w importfromexcel - po prostu na etapie kompilacji wydaje się ok ;)
- informacyjnie - kiedy mam już działający plik z informacją o połączeniu, jakie znaczenie ma zapis w settings:
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=srv;Initial Catalog=CDNXL_2012;Persist Security Info=Tru" +
"e;User ID=sa;Password=12345")]
Powinienem coś z tym zrobić...? Samo otwarcie okna Settings wyświetla błąd "an error occurred while reading the app.config file. the file might be corrupted", pomimo którego aplikacja działa bez problemu.