Diskuze: Evidence zakázek
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 50 zpráv z 63.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
však na csv tu máš celý tutoriál ^^ http://www.itnetwork.cz/…-souboru-csv
Textový soubor je obecné označení, CSV je textový soubor s nějakou strukturou. XML je také textový soubor, ale s jinou strukturou. Totéž HTML, CSS, JS, TeX, YAML, JSON, ... Všechny jsou textové soubory.
vypsání zákazníků
No na toto bych použil DB... (Uchovávání zákazníků.)
Já jsem to myslel tak, že se dá to csv uložit pod příponou txt... Asi jsem to špatně napsal.
Nad použitím databáze jsem uvažoval, ale jelikož vůbec neumím sql dotazy, tak jsem to zamítl... Ale asi to bude nejvhodnější předělat to na databázi a sql se naučit
Některé operační systémy podle přípony asociují ikony a aplikace. Jinak je bez významu.
SQL se dá dobře naučit asi za 2 dny, použitelné základy zvládneš za 2 hodiny.
Snad jo, zítra to musím našprtat a pak tvořit jako ďas (tlačí mě termín)
Můžeš použít SQLite. Je to jen malá knihovna, neinstaluje se. Databázi uchovává v jednom souboru, který se dá přenášet.
.NET má nějakou embedded verzi databáze, nezkoušel jsem to, ale mám ověřené, že to jde rychle naklikat a nemusíš nic řešit ani instalovat, funguje to potom všude.
Nějak mi ušlo, na co se konkrétně ptáš. Úplně nejlepší by bylo, kdybys poslal kus kódu co nefunguje nebo popsal problém, který řešíš. Ten projekt se mi luštit moc nechce, to bych tu nedělal nic jiného.
Ptal jsem se na vyhledání zákazníka podle id a jeho následné vrácení do pole, které by se vypsalo v listboxu, zde je kód
public Customer[] FindCustomer(int id)
{
string line;
int buffer = 0;
string[] g = new string[1];
using (StreamReader sr = new StreamReader(file))
{
while ((line = sr.ReadLine()) != null)
{
string[] data = line.Split(';');
buffer = int.Parse(data[0]);
if (id == buffer)
{
g = data;
}
}
}
return g;
}
public string[] FindCustomerById(string id)
{
string line = "";
using (StreamReader sr = new StreamReader(file))
while ((line = sr.ReadLine()) != null)
if (line.StartsWith(id))
return line.Split(";");
return null;
}
Díky, ještě bych potřeboval poradit s výpisem dat do list boxu..
pro výpis zákazníků do listboxu používám toto
public Form1()
{
InitializeComponent();
DatabazeC customer = new DatabazeC("customers.txt");
customer.Read();
listBox1.Items.Clear();
listBox1.Items.AddRange(customer.back());
}
ale do listboxu se mi vypíše místo dat jen
WindowsFormsApplication1.Customer
zde je ta metoda customer.back
public Customer[] back()
{
return customer.ToArray();
}
a když chci vypsat toho vyhledaného zákazníka, tak mi to v list boxu
píše
String[] Array
To je mi celkem nanic - jaká jsou data na vstupu - před převodem do array?
(na což bych nepoužil metodu... )
Pošli větší kus kódu...
class DatabazeC
{
private List<Customer> customer;
private string file;
public DatabazeC(string file)
{
customer = new List<Customer>();
this.file = file;
}
public void AddCustomer(int id, string name, string address, int psc, string phoneNumber, string email)
{
Customer nO = new Customer(id, name, address, psc, phoneNumber, email);
customer.Add(nO);
}
public Customer[] back()
{
return customer.ToArray();
}
public void Save()
{
using (StreamWriter sw = new StreamWriter(file))
{
foreach (Customer nC in customer)
{
string[] data = { nC.Id.ToString(), nC.Name, nC.Address, nC.Psc.ToString(), nC.PhnoneNumber, nC.Email };
string line = String.Join(";", data);
sw.WriteLine(line);
}
sw.Flush();
}
}
public void Read()
{
using (StreamReader sr = new StreamReader(file))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] data = line.Split(';');
int id = int.Parse(data[0]);
string name = data[1];
string address = data[2];
int psc = int.Parse(data[3]);
string phoneNumber = data[4];
string email = data[5];
AddCustomer(id, name, address, psc, phoneNumber, email);
}
}
}
public int ID()
{
string line;
int buffer = 0;
using (StreamReader sr = new StreamReader(file))
{
while ((line = sr.ReadLine()) != null)
{
string[] data = line.Split(';');
int id = int.Parse(data[0]);
if (id > buffer)
{
buffer = id;
}
}
}
buffer = buffer + 1;
return buffer;
}
public string[] FindCustomer(string id)
{
string line = "";
using (StreamReader sr = new StreamReader(file))
while ((line = sr.ReadLine()) != null)
if (line.StartsWith(id))
return line.Split(';');
return null;
}
}
}
class Customer
{
public int Id { get; private set; }
public string Name { get; private set; }
public string Address { get; private set; }
public int Psc { get; private set; }
public string PhnoneNumber { get; private set; }
public string Email { get; private set; }
public Customer(int id,string name, string address, int psc, string phoneNumber, string email)
{
Id = id;
Name = name;
Address = address;
Psc = psc;
PhnoneNumber = phoneNumber;
Email = email;
}
}
Prosím tě, napiš mi sem zadání té maturitní práce Podle mě jsi k tomu přistoupil
dosti nehezky. Tedy co koukám do toho, co již máš a uploadnul jsi to na
ulož.to
Mám tedy nějakou mlhavou představu, ale nejsem si plně jist, co by to tedy
mělo dělat a nemělo. Je to část tvého projektu, nebo je toto celé?
Pakliže je to celé, řešíš to zbytečně složitě, pakliže z podobných
útržků skládáte nějaký větší projekt, začal jsi špatně...
Určitě DB, alespoň Access, když už tedy nic jiného. A pokud skládají
nějaký větší projekt, tak oddělit GUI od funkcionality
V C# normálně local db. A udělat si objekt - který bude "lepit" SQL dotazy. Šlo by použít i serverovou a LINQ to SQL, ale tady se ty dotazy přímo hodí...
A rovnou by se daly řádky z db vytáhnout do listu Users. A User by měl ty potřebné vlastnosti atp...
using System.Collections.Generic;
using System.Data.SqlServerCe;
using System.Linq;
using System;
public class TableManager
{
private SqlCeConnection Connection { get; set; }
public TableManager(SqlCeConnection connection)
{
Connection = connection;
Connection.Open();
}
public List<List<object>> Select(string tableName)
{
List<List<object>> rows = new List<List<object>>();
SqlCeCommand getData = Connection.CreateCommand();
getData.CommandText = "SELECT * FROM " + tableName;
using (SqlCeDataReader reader = getData.ExecuteReader())
while (reader.Read())
{
List<object> row = new List<object>();
for (int i = 0; i < reader.FieldCount; i++)
row.Add(reader.GetValue(i));
rows.Add(row);
}
return rows;
}
public List<List<object>> SelectRowsBy(string tableName, string column, string searchingValue)
{
List<List<object>> rows = new List<List<object>>();
SqlCeCommand getData = Connection.CreateCommand();
getData.CommandText = "SELECT * FROM " + tableName + " WHERE " + tableName + "." + column + "='" + searchingValue + "'";
using (SqlCeDataReader reader = getData.ExecuteReader())
while (reader.Read())
{
List<object> row = new List<object>();
for (int i = 0; i < reader.FieldCount; i++)
row.Add(reader.GetValue(i));
rows.Add(row);
}
return rows;
}
public void Insert(string tableName, string[] columns, object[] parameters)
{
SqlCeCommand setData = Connection.CreateCommand();
string values = String.Join(", ", columns);
setData.CommandText = "INSERT INTO " + tableName + " (" + values.Replace("@", "") + ") VALUES (" + values + ")";
for (int index = 0; index < columns.Length; index++)
setData.Parameters.AddWithValue(columns[index].Replace("@", ""), parameters[index]);
setData.ExecuteNonQuery();
}
public void Update(string tableName, string idOfUpdatingRow, string[] columns, object[] parameters)
{
SqlCeCommand updateData = Connection.CreateCommand();
string buildedColumns = String.Join(", ", columns);
updateData.CommandText = "UPDATE " + tableName + " SET " + buildedColumns.Replace("@", "") + "=" + buildedColumns + " WHERE id=@id";
updateData.Parameters.AddWithValue("@id", idOfUpdatingRow);
for (int index = 0; index < parameters.Length; index++)
updateData.Parameters.AddWithValue(columns[index], parameters[index]);
updateData.ExecuteNonQuery();
}
public void DeleteBy(string tableName, string column, string searchingValue)
{
SqlCeCommand removeData = Connection.CreateCommand();
removeData.CommandText = "DELETE FROM " + tableName + " WHERE " + tableName + "." + column + "='" + searchingValue + "'";
removeData.ExecuteNonQuery();
}
}
K tomu zadání, program by měl umět vytvořit novou objednávku a u té později evidovat odpracované hodiny a materiál ( i jeho cenu), dále vytvořit zákazníka a vytvořit fakturu. Vyfakturované objednávky a faktury ukládat do nějakého archivu. Na uložtu je jen rozpracovaný projekt, není to celé,ale už je to jedno, jelikož to jdu dělat v té databázi. Zvolil jsem si tu lokální(.sdf)
Díky za takový kus kód, zatím se ho snažím pochopit, co se v něm děje (sql), ale při zkoušce připojení k mé databázi mi to hází chybu...
try
{
TableManager pokus = new TableManager(Properties.Settings.Default.DatabaseConnectionString);
MessageBox.Show("jde");
}
catch
{
MessageBox.Show("nejde");
}
asi tam patří něco jiného než Properties.Settings.Default.DatabaseConnectionString, ale nevím co..
Patří tam ConnectionString...
new SqlCeConnection("server=jméno serveru; user id=jméno uživatele; password=heslo k účtu; database=databáze;")
Údaje dosaď pochopitelně své...
Měl by jsi při vytvoření DB dostat soubor s tímto stringem - xxx.config - já dostal:
Data Source=|DataDirectory|\Database1.sdf
už mi funguje připojení
SqlCeConnection x = new SqlCeConnection(Properties.Settings.Default.DatabaseConnectionString);
TableManager pokus = new TableManager(x);
MessageBox.Show("jde");
Takhle "štastnej" jsem už dlouho nebyl
Ale ten try blok - takto ne prosím...
Však to má jen kvůli diagnostice, jestli mu to připojení k DB vůbec jede.
Já už se učím programovat ve škole třetím rokem => projekt s
programováním, ale předchozí dva roky mě učil učitel se znalostma, které
mám já tento rok je to
ale jiné, dostali jsme učitele z Microsoftu a ten to s náma bere od
začátku...
MySQL je spíš jednoduché datové úložiště než databáze. Na web to většinou jakž takž stačí, na maturitní projekt také, ale větší aplikaci bych na tom raději nestavěl.
Já mám v c# tu jejich databázi a to asi není MySQL, teda alespoň si myslím, že to není MySQL
Kdybys tam měl MySQL, určitě bys o tom věděl. Instaluje se zvlášť nebo v rámci různých WAMP, ale určitě ne zabalený s C#.
V tom případě tam MySQL nemám, wamp jsem neinstaloval a v c# ta databáze má pak koncovku .sdf
.sdf je přípona pro soubory Microsoft SQL Server Compact (SQL CE). Bohužel jsem nikde nenašel, co všechno z jazyka SQL umí.
Na co? Vůbec z toho nevidím, co SQL CE umí. Jenom vím, že neumí pohledy, triggery a integritní omezení. Nejspíš neumí ani cizí klíče, nebo snad ano?
Jak tak koukám, SQL CE cizí klíče umí. Dokonce umí i transakce. To je víc než umí MySQL, tedy až na ty triggery. Už jsem našel i soupis funkcí.
Zobrazeno 50 zpráv z 63.