OriginalGriff
Только не это! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.
Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.
Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?
Сказав это, есть несколько других проблем с вашим подходом:
1) Никогда не передавайте информацию DateTime в виде строки, даже если вы допустили ошибку, сохранив ее как таковую: это означает, что формат передаваемой даты всегда будет зависеть от пользовательских настроек компьютера, на котором работает ваше приложение, - и это означает, что вы не сможете определить, что это за дата: "01-02-03" - это что? Первое Февраля 2003 Года? Второе Января 2003 Года? Третье Февраля 2001 Года? Полностью зависит от настроек пользователя! Всегда передавайте значения DateTime как DateTime через параметры.
2) Если вы обновляете\ae поле с меткой времени, вам действительно нужно использовать UTC, а не местное время для компьютера, на котором работает приложение. Отчасти для того, чтобы избежать перехода на летнее время, вызывающего проблемы, но в основном для того, чтобы международные пользователи не входили в дико разное время в один и тот же момент, и то и другое локально правильно!
3) Не используйте
.Text == ""
в качестве теста на "пустоту": используйте
string.IsNullOrWhitepace
вместо. - "это не то же самое, что""!
Один (лучший) способ сделать это-позволить Sql Server обрабатывать метку времени за вас:
sql server - требуется поле datetime в MS SQL, которое автоматически обновляется при изменении записи - переполнение стека[
^] который может использовать UTC и серверное время, так что никогда не будет путаницы с часовыми поясами, переходом на летнее время или компьютером, у которого часы установлены неправильно ...
NandaNurdin
Итак, вот обновление
MySqlConnection con = new MySqlConnection(@"data source=localhost;port=3306;userid=root;password=;database=login;");
MySqlCommand cmd;
MySqlDataAdapter adapter;
практическое руководство
public void CekData()
{
con.Open();
adapter = new MySqlDataAdapter("select * from data", con);
DataTable table = new DataTable();
adapter.Fill(table);
dataGridView1.DataSource = table;
con.Close();
}
вставка данных
<pre>private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "" && textBox3.Text != "")
{
MessageBox.Show("Isi Data Terlebih Dahulu");
}
else
{
con.Open();
cmd = new MySqlCommand("INSERT INTO login.data (Nomor,Nama,Alamat,Jenis,Jam) VALUE (@nomor,@nama,@alamat,@jenis,@jam)");
cmd.Parameters.AddWithValue("@nama",textBox1.Text);
cmd.Parameters.AddWithValue("@nomor", textBox2.Text);
cmd.Parameters.AddWithValue("@alamat", textBox4.Text);
cmd.Parameters.AddWithValue("@jenis", textBox3.Text);
cmd.Parameters.AddWithValue("@jam", DateTime.Now);
CekData();
} con.Close();
}
обновить данные
<pre>private void button3_Click(object sender, EventArgs e)
{
if (textBox1.Text != "" && textBox2.Text != "" && textBox4.Text != "" && textBox3.Text != "")
{
MessageBox.Show("Isi Data Terlebih Dahulu");
}
else
{
con.Open();
cmd = new MySqlCommand("UPDATE login.data SET Nama=@nama, Alamat=@alamat, Jenis=@jenis, Jam=@jam WHERE Nomor=@nomor");
cmd.Parameters.AddWithValue("@nama",textBox2.Text);
cmd.Parameters.AddWithValue("@nama", textBox4.Text);
cmd.Parameters.AddWithValue("@nama", textBox3.Text);
cmd.Parameters.AddWithValue("@jam", DateTime.Now);
CekData();
} con.Close();
}
теперь проблема в том, что datagridview не может отображаться из-за проблемы со строкой..