konto usunięte
konto usunięte
Temat: Prośba o pomoc w prostej aplikacji Mysql
looknij w ten kod, powinien pokazać ci mniej więcej jak to zrobić żeby miało to sens1. po co masz pod każdym guzikiem prawie ten sam kod? hmm
2. czemu UPDATE chcesz wykonać tak jak SELECT? UPDATE nie zwraca wyniku, dlatego masz do tego inną metodę
3. czemu kleisz SQL-a? skoro masz parametry - obie metody masz w przykładzie
Ten post został edytowany przez Autora dnia 04.03.15 o godzinie 22:09
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
private const string MyConnection = "datasource=localhost;port=3306;username=root;password=kalafior;database=baza1568_12";
private MySqlConnection MyConn = new MySqlConnection(MyConnection);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string sSql = string.Format("select nr_sprawy,rok,nazwa_firmy,notatka,zakonczono_przez_dzial,realizacja from sprawy where id_dyrektora='{0}';", this.textBox1.Text);
dataGridView1.DataSource = GetDataFromSql(sSql);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
string sQuery = "update sprawy set zakonczono_przez_dzial='1' where id_dyrektora=@id_dyrektora AND rok=@rok AND realizacja='1';";
Dictionary<string, string> parms = new Dictionary<string, string>();
parms.Add("id_dyrektora", this.textBox1.Text);
parms.Add("rok", this.rokBox.Text);
ExecuteSql(sQuery, parms);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void ExecuteSql(string sSql, Dictionary<string, string> parms)
{
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = MyConn;
cmd.CommandText = sSql;
cmd.Prepare();
foreach (var parm in parms)
{
cmd.Parameters.AddWithValue(string.Format("@{0}", parm.Key), parm.Value);
}
cmd.ExecuteNonQuery();
}
private DataTable GetDataFromSql(string sSql)
{
if (MyConn.State != ConnectionState.Open)
{
MyConn.Open();
}
MySqlCommand MyCommand = new MySqlCommand(sSql, MyConn);
MySqlDataAdapter MyAdapter = new MySqlDataAdapter(MyCommand);
DataTable dTable = new DataTable();
MyAdapter.Fill(dTable);
return dTable;
}
}
}
Grzegorz Kot Programista .NET
Temat: Prośba o pomoc w prostej aplikacji Mysql
1. Piszemy kod tak aby był uniwersalnych (unikamy duplikatów w przypadku gdzie da się to w prosty sposób parametryzować)2. Update - ExecuteNonQuery; Select - ExecuteReader, ExecuteScalar
3. Używamy parametrów lub tworzymy obiekt rekordu - działa szybciej. Unikamy przy tym wszelkich sql injection.
Przemysław, dodaj do swojego kodu wykorzystanie "using" pozwoli to na bezpieczniejsza pracę pod względem alokacji pamięci i złożył bym nieco kod, nie jest tu potrzebne aż tyle linijek.
funcja(){
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = MyConn;
cmd.CommandText = sSql;
cmd.Prepare();
foreach (var parm in parms)
{
cmd.Parameters.AddWithValue(string.Format("@{0}", parm.Key), parm.Value);
}
cmd.ExecuteNonQuery();
}
proponuje
funkcja()
{
using(MySqlCommand cmd = MyConn.CreateCommand())
{
cmd.CommandText = @"select *......";
foreach (var parm in parms)
{
cmd.Parameters.AddWithValue(string.Format("@{0}", parm.Key), parm.Value);
}
cmd.ExecuteNonQuery();
}
}
Oczywiście jeśli baza obsługuje transakcje, polecam dorzucić transakcje przy wszelkich Update,Delete.
Oczywiście w przypadku niektórych baz danych wywoływanie metod Execute mija się z celem, czasem wyrzuca błąd lub też zwraca zero rekordów pomimo, że w dowolnym IDE do baz danych dostajemy wynik warto wtedy skorzystać z DataAdaptera - przypadek też może działać na odwrót. Ten post został edytowany przez Autora dnia 06.03.15 o godzinie 12:31
Podobne tematy
-
Programiści .NET » Prośba o pomoc w poszukiwaniu grupy... -
-
Programiści .NET » Pomoc przy projektowaniu webowych aplikacji .NET -
-
Programiści .NET » Head First C# Lab #1 - prośba o pomoc -
-
Programiści .NET » Prośba o pomoc - program w C# -
-
Programiści .NET » Programista Aplikacji Klient-Server VB vs SQL -
-
Programiści .NET » Potrzebny PROJECT MANAGER do aplikacji muzycznej! -
-
Programiści .NET » Blokowanie zamknięcia aplikacji -
-
Programiści .NET » .netshrink - kompresor aplikacji .NET, DLL binder,... -
-
Programiści .NET » c# MySql i liczenie prawidłowych zapytań -
-
Programiści .NET » Analiza wsteczna aplikacji .NET -
Następna dyskusja: