|
c# c#
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:39 Naslov sporočila: Vaja 13 – ORM - login + datagridview edit |
|
|
Vaja 13 – ORM - login + datagridview edit
Izdelajte aplikacijo, ki bo preko uporabe knjižnice Nhibernate omogočala urejanje tabele
uporabnikov v podatkovni bazi MySQL. Z ORM pristopom napravite razred (entiteto) Users,
ki se v podatkovni bazi interpretira kot tabela Uporabnik, in vsebuje naslednje 3 stolpce: Id
(primarni ključ), Ime (string), Geslo (string). Pri zagonu aplikacije se najprej prikaže okno za
avtorizacijo (1). S pritiskom na gumb Login se izvede preverjanje/primerjava podatkov v
tabeli Uporabnik. Ob uspešni primerjavi se prikaže glavno okno (2), ki pa vsebuje samo meni
Users za urejanje tabele. Ob izbiri menija se prikaže novo okno (3), ki vsebuje gradnik
datagridview, ki je povezan posredno s tabelo preko razreda BindingSource, ki omogoča, da
se spremembe (dodajanje, brisanje, spreminjanje) na gradniku odražajo s spremembami v
tabeli. S pritiskom na gumb Done se okno zapre in se vrnemo v glavno okno. |
|
Nazaj na vrh |
|
|
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:40 Naslov sporočila: |
|
|
dodamo dateoteke:
log4net.dll
MySql.Data.dll
NHibernate.Mapping.Attribute.dll
NHibebernate.dll
lesi.Collection.dll
nhibernate-configuration.xsd
nhibernate-mapping.xsd
v datoteko
App.Config
dodamo:
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="use_proxy_validator">true</property>
<property name="connection.connection_string">Server=localhost;Database=test;User ID=root;Password=;Port=3306</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
<log4net>
<appender name="DebugSQL" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="HibernateLogFile" type="log4net.Appender.RollingFileAppender">
<file value="hibernate_log.txt"/>
<appendToFile value="false"/>
<encoding value="utf-8"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>
<appender name="HibernateSQLLogFile" type="log4net.Appender.RollingFileAppender">
<file value="hibernateSQL_log.txt"/>
<appendToFile value="false"/>
<encoding value="utf-8"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>
<!--
<root>
<level value="DEBUG" />
<appender-ref ref="DebugSQL" />
</root>
-->
<logger name="NHibernate">
<level value="DEBUG" />
<appender-ref ref="HibernateLogFile" />
</logger>
<logger name="NHibernate.SQL">
<level value="DEBUG" />
<appender-ref ref="HibernateSQLLogFile" />
</logger>
</log4net> |
|
Nazaj na vrh |
|
|
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:41 Naslov sporočila: |
|
|
entiteta
Users.cs
using NHibernate.Mapping.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace vaja13ormLoginEdit.Entity
{
[Serializable] //[...] = anotacije
[Class(Schema = "test", Table = "Uporabnik", NameType = typeof(Users))]
class Users
{
[Id(Name = "Id", Column = "ID", Type = "int"), Generator(1, Class = "native")]
public virtual int Id { get; set; } //lazy loading
[Property(Column = "Ime", Type = "string", NotNull = true, Length = 128, Unique = true)]
public virtual string Name { get; set; }
[Property(Column = "Geslo", Type = "string", NotNull = true, Length = 512)]
public virtual string Pass { get; set; }
}
} |
|
Nazaj na vrh |
|
|
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:42 Naslov sporočila: |
|
|
razred:
Login.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace vaja13ormLoginEdit
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)//brisi!!!
{
}
}
} |
|
Nazaj na vrh |
|
|
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:42 Naslov sporočila: |
|
|
Edit.cs
using NHibernate;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using vaja13ormLoginEdit.Entity;
namespace vaja13ormLoginEdit
{
public partial class Edit : Form
{
private ISessionFactory m_SessionFactory = null;
private ISession m_Session = null;
private IList<Users> _users;
private BindingSource _bs;
public Edit()
{
InitializeComponent();
dataGridView1.AllowUserToAddRows = true;
}//edit
public void SetNhib(ISessionFactory isf, ISession iss)
{
m_SessionFactory = isf;
m_Session = iss;
}
private void dataGridView1_AllowUserToAddRowsChanged(object sender, EventArgs e)
{
}//odstrani!!
private void l(object sender, EventArgs e)
{
}//odstrani!!
private void Edit_Load(object sender, EventArgs e)
{
_users = m_Session.CreateCriteria(typeof(Users)).List<Users>();
_bs = new BindingSource();
_bs.DataSource = _users;
_bs.AllowNew = true;
dataGridView1.DataSource = _bs;
_bs.ListChanged += new System.ComponentModel.ListChangedEventHandler(bs_ListChanged);
}//edit_load
void bs_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
{
switch (e.ListChangedType)
{
case ListChangedType.ItemChanged:
{
using (ITransaction tx = m_Session.BeginTransaction())
{
Users new_user = (Users)(_bs.List[e.NewIndex]);
if (new_user.Name == null)
new_user.Name = "";
if (new_user.Pass == null)
new_user.Pass = "";
m_Session.Save(new_user);
tx.Commit();
}
break;
}
}
}
private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
using (ITransaction tx = m_Session.BeginTransaction())
{
Users new_user = (Users)(e.Row.DataBoundItem);
m_Session.Delete(new_user);
tx.Commit();
}
}
}
} |
|
Nazaj na vrh |
|
|
seesharp Administrator foruma
Pridružen/-a: 27.06. 2017, 18:40 Prispevkov: 43
|
Objavljeno: 28 Jun 2017 12:45 Naslov sporočila: |
|
|
Form1.cs
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using vaja13ormLoginEdit.Entity;
namespace vaja13ormLoginEdit
{
public partial class Form1 : Form
{
private ISessionFactory m_SessionFactory = null;
private ISession m_Session = null;
private Login fLogin;
private Edit fEdit;
public Form1()
{
InitializeComponent();
ConfigureLog4Net();
ConfigureNHibernate(false);
Login();
}
private void initUser()
{
try
{
ITransaction tx = m_Session.BeginTransaction();
Users usr = new Users();
usr.Name = "test";
usr.Pass = "test";
m_Session.Save(usr);
tx.Commit();
}
catch (Exception ex)
{
ResetSession();
}
}
private void Login()
{
//login
int count = 3;
fLogin = new Login();
if (fLogin.IsDisposed)
fLogin = new Login();
while (count>0)
{
if (fLogin.ShowDialog() == DialogResult.OK)
{
if (CheckUser(fLogin.Controls["tb_user"].Text, fLogin.Controls["tb_pass"].Text))
{
count = -1;
this.Text = "User: " + fLogin.Controls["tb_user"].Text;
}
else
{
MessageBox.Show("Wrong data, Please retry!");
count--;
}
}
}
fLogin.Dispose();
if (count == 0)
System.Environment.Exit(0);
}//login
private bool CheckUser(string user, string pass)
{
bool result = false;
try
{
ITransaction tx = m_Session.BeginTransaction();
IQuery query = m_Session.CreateQuery("from Users d where d.Name = ?");
Users res = query.SetString(0, user).UniqueResult<Users>();
tx.Commit();
if (res != null && res.Pass.Equals(pass))
result = true;
}
catch (Exception ex)
{
ResetSession();
}
return result;
}//check user
private void usersToolStripMenuItem_Click(object sender, EventArgs e)
{
fEdit = new Edit();
fEdit.SetNhib(m_SessionFactory, m_Session);
fEdit.ShowDialog();
} //usersToolStripMenuItem_Click
private void ConfigureLog4Net()
{
log4net.Config.XmlConfigurator.Configure();
}//ConfigureLog4Net
private void ConfigureNHibernate(bool bDrop)
{
Configuration config = new Configuration();
config.Configure();
HbmSerializer.Default.Validate = true;
config.AddInputStream(HbmSerializer.Default.Serialize(System.Reflection.Assembly.GetExecutingAssembly()));
//ustvarimo novo tabelo ():
config.AddAssembly(typeof(Users).Assembly);
new SchemaExport(config).Execute(true, true, bDrop);
m_SessionFactory = config.BuildSessionFactory();
m_Session = m_SessionFactory.OpenSession();
initUser(); //zakomentiramo po prvem zagonu
} //ConfigureNHibernate
private void ResetSession()
{
m_Session.Close();
m_Session.Dispose();
m_Session = m_SessionFactory.OpenSession();
}
}//form
}//namespace |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu
|
|