Если еще нулевые значения в datagridview - PullRequest
1 голос
/ 06 февраля 2020

Используя c# winforms и sqlite

Я хочу вставить из набора данных в мою базу данных. Столбцы: Имя, Дата начала, Дата окончания. Все данные в столбцах «Дата» и «Дата окончания» представлены в неправильном формате, M / dd / гггг, поэтому я преобразовываю их с string startdate = Convert.ToDateTime(startdatetime).ToString("dd/M/yyyy"); Проблема в том, что в столбцах «Дата начала» и «Дата окончания» отсутствуют значения, поэтому я не могу конвертировать все без проверки на нулевые ячейки в первую очередь. Поэтому я не уверен, что поставить для запроса, потому что, если ячейка пуста, вставка startdatetime переведет ее в неправильный формат, тогда как вставка startdate вызовет ошибку. Я планирую изменить его, чтобы сделать его более безопасным и защищенным от sqlinjection после того, как я закончу.

        string startdatetime = dataGridView1.SelectedRows[0].Cells["Start Date"].Value.ToString();
        string enddatetime = dataGridView1.SelectedRows[0].Cells["End Date"].Value.ToString();

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (string.IsNullOrEmpty(cell.Value as string))
                {
                    string txtQuery = "insert into CertDB(DateAttended, EndDate) values ('" + startdatetime + "', '" + enddatetime + "')";
                    ExecuteQuery(txtQuery);
                }
                else
                {
                    string startdate = Convert.ToDateTime(startdatetime).ToString("dd/M/yyyy");
                    string enddate = Convert.ToDateTime(enddatetime).ToString("dd/M/yyyy");
                    string expiry = Convert.ToDateTime(expirytime).ToString("dd/M/yyyy");
                    string txtQuery = "insert into CertDB(DateAttended, EndDate) values ('" + startdate + "', '" + enddate + "')";
                    ExecuteQuery(txtQuery);
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

.ToString() не будет обрабатывать null, поэтому необходимо использовать Convert.ToString()

        string startdatetime = Convert.ToString(dataGridView1.SelectedRows[0].Cells["Start Date"].Value);
        string enddatetime = Convert.ToString(dataGridView1.SelectedRows[0].Cells["End Date"].Value);

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (string.IsNullOrEmpty(cell.Value as string))
                {
                    string txtQuery = "insert into CertDB(DateAttended, EndDate) values ('" + startdatetime + "', '" + enddatetime + "')";
                    ExecuteQuery(txtQuery);
                }
                else
                {
                    string startdate = string.IsNullOrWhiteSpace(startdatetime) ? DBNull.Value : Convert.ToDateTime(startdatetime).ToString("dd/M/yyyy");
        string enddate = string.IsNullOrWhiteSpace(enddatetime) : DBNull.Value : Convert.ToDateTime(enddatetime).ToString("dd/M/yyyy");
        string expiry = string.IsNullOrWhiteSpace(expirytime) ? DBNull.Value : Convert.ToDateTime(expirytime).ToString("dd/M/yyyy");
        string txtQuery = "insert into CertDB(DateAttended, EndDate) values ('" + startdate + "', '" + enddate + "')";
        ExecuteQuery(txtQuery);
                }
            }
        }

Снова столбцы DateAttended и EndDate должны быть nullable в DataBase. Вы также можете прочитать больше о .ToString() и Convert.ToString()

0 голосов
/ 06 февраля 2020

Попробуйте это -

string startdatetime = Convert.ToString(dataGridView1.SelectedRows[0].Cells["Start Date"].Value);
string enddatetime = Convert.ToString(dataGridView1.SelectedRows[0].Cells["End Date"].Value);

if (!string.IsNullOrEmpty(startdatetime)) startdatetime = Convert.ToDateTime(startdatetime).ToString("dd/MM/yyyy");
if (!string.IsNullOrEmpty(enddatetime)) enddatetime = Convert.ToDateTime(enddatetime).ToString("dd/MM/yyyy");

string txtQuery = "insert into CertDB(DateAttended, EndDate) values ('" + startdatetime + "', '" + enddatetime + "')";

ExecuteQuery(txtQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...