Har nu påbörjat att inte bara skriva webbapplikationer, utan nu även skrivit en console-applikation. Har några frågor som jag hoppas få hjälp med. 1) Fel, loopen tar all cpu-kraft. Använd istället ReadLine-funktionen som är blockerande om jag inte missminner mig, dvs. retunerar inte förrens enter-knappen trycks ner. 1) Så länge du ser till att lägga in pauser med Environment.DoEvents och System.Threading.CurrentThread.Sleep() så är det nog ok. Tack för bra svar :)Lite småfrågor
1. Console-applikationen är en variant av cmd med anpassade funktioner. För att hålla den vid liv hela tiden använder jag mig av en do-while där den stängs av först efter att ett kommando skrivits in. Är det fel väg? Finns det smidigare? Något man måste tänka på?
2. En av funktionerna är att hämta upp data från olika db som användaren har möjlighet att spara ner på textfil (kod nedan). Problemet är att när man vill hämta på nytt med annat villkor och ska spara ner till textfilen så skriver den över befintliga rader istället för att lägga till. Hur löser man det?
3. För vissa funktioner så måste man ange användarnamn och lösen, och dessa inputfält vill jag inte att värderna ska synas. Måste jag sätta forecolor till samma värde som backcolor, eller finns det smidigare sätt?
Kod för att hämta och skriva till textfil:
<code>
public void GetInfo(string nr)
{
try
{
SqlConnection conn = new SqlConnection("Data Source=test;Initial Catalog=test;Integrated Security=True;Pooling=False");
SqlCommand cmd = new SqlCommand("GetInfoSP", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@nr", nr);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
string varde = "";
TextWriter sw = new StreamWriter(@"C:\utdata.txt");
while (reader.Read())
{
varde = reader["col1"].ToString() + " " + reader["col2"] + " " + reader["col3"] + " " + reader["col4"] + " " + reader["col5"];
sw.WriteLine(varde);
varde = "";
}
sw.Close();
conn.Close();
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
}
</code>Sv: Lite småfrågor
Sv: Lite småfrågor
[Edit : ...men Oscars lösning är nog ännu bättre]
2) Alla metoder för att öppna filer brukar ha några överlagrade Open-metoder, där det finns en extra parameter som styr hur filen skall öppnas. Alternativen brukar vara t ex Create, CreateNew, Append m fl. Det du är ute efter är Append, då kommer nya rader läggas till slutet.
[edit : Jag tänkte lite fel här. Om du öppnar en ström med System.IO.File.Open() så finns de parametrar jag talar om ovan. StreamWriter-klassen har dock en överlagrad konstruktor som tar en boolean som anger om Append skall användas.]Sv:Lite småfrågor
1. Löste det genom att gå till en funktion run. Därifrån kallar jag på andra funktioner via readline och i slutet på varje funktion går den tillbaka rill run.
2. Gjorde det onödigt svårt för mig. Löste det på följande sätt:
<code>
path = @"C:\Test.txt";
if (!File.Exists(path))
{
File.WriteAllText(path, "Resultat:" + Environment.NewLine, Encoding.UTF8);
}
//Hämtar från db
while (reader.Read())
{
Test = reader["col1"].ToString() + " " + reader["col2"].ToString() + " " + reader["col3"].ToString() + " " + reader["col4"].ToString() + " " + reader["col5"].ToString();
File.AppendAllText(path, Test + Environment.NewLine, Encoding.UTF8);
}
</code>
Är det något dock som har något förslag på punkt 3?