NandaNurdin Ответов: 1

Как обновить datetime в моей базе данных?


Привет, кто-нибудь может мне помочь, я пытаюсь обновить свою дату и время в своей базе данных. Сначала я вставляю данные с помощью этого кода:

private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox3.Text == "")
            {
                MessageBox.Show("Isi Data Terlebih Dahulu");
            }
            else
            {

                string insertQuery = "INSERT INTO login.data (Nomor, Nama, Alamat, Jenis, Jam) VALUE ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox4.Text + "','" + textBox3.Text + "', '" + DateTime.Now + "')";
                EksekusiQuery(insertQuery);
                
                CekData();
            }
        }


и в полевой базе данных я получил данные именно в то время, когда я их вводил. Теперь я хочу создать функцию для обновления данных, чтобы "текущее время" изменилось на "текущее время", когда я обновляю данные. Идея моей программы-это как регистрация заезда и отъезда.

Что я уже пробовал:

Код, который я попробовал обновить, таков:

private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox3.Text == "")
            {
                MessageBox.Show("Check the Data");
            }
            else
            {
                string updateQuery = "UPDATE 'login.data' SET 'Nomor' ='" + this.textBox1.Text + "', 'Nama' ='" + this.textBox2.Text + "','Alamat' ='" + this.textBox4.Text + "','Jenis' ='" + this.textBox3.Text + "','Jam' ='" + DateTime.Now + "', WHERE 'Nomor'= '" + this.textBox1.Text + "'";
                
                EksekusiQuery(updateQuery);
                CekData();
            }
        }


и мое значение DateTime-Varchar, но программа не может вставить данные. Я использую VS C# 2010

Richard MacCutchan

Не использовать varchar для даты и времени, использовать правильные значения даты и времени.

Oshtri Deka

1. Я согласен с замечанием Ричарда.
2. Как долго длится этот столбец varchar в БД?
3. Написать нам текст сообщения об ошибке вы получаете.

1 Ответов

Рейтинг:
0

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 не может отображаться из-за проблемы со строкой..