C # обновление базы данных - PullRequest
1 голос
/ 03 октября 2011

Я использую Oledb в качестве своей базы данных и пытаюсь обновить столбец «Состояние» в моей БД, когда пользователь подключается и выходит из системы. Так и получается ..

Когда пользователь нажимает, он запрашивает столбец «Status» БД, был ли он «IN», «OUT» или ранее пустым. Когда запрашивается значение «IN», статус будет установлен на «OUT» в настоящее время и наоборот. Все обновления работают именно так, как я хочу, за исключением того, что предупреждение " NullReferenceException было необработанным ", которое продолжает появляться в этой строке каждый раз, когда я запускаю ее, и я не могу продолжать работать дальше: str = cmd1 .ExecuteScalar () ToString ();.

Я очень новичок в C #, и было бы хорошо, если бы кто-нибудь подробно объяснил мне, как я могу это исправить. Спасибо!

        // prepare command string
        string selectString = @"SELECT Status FROM jiahe where [Tag ID] = '" + textBox1.Text + "'";

        // 1. Instantiate a new command with command text only
        OleDbCommand cmd = new OleDbCommand(selectString, objConnection);

        // 2. Set the Connection property
        cmd.Connection.Open();

        // 3. Call ExecuteNonQuery to send command
        string str = cmd.ExecuteScalar().ToString();

        cmd.Connection.Close();

        if (str.Length == 2 || str.Length == 0)
        {

            //MessageBox.Show("Status: " + str);

            // prepare command string
            string updateString = @"update jiahe set Status = 'OUT' where [Tag ID] = '" + textBox1.Text + "'";

            // 1. Instantiate a new command with command text only
            OleDbCommand cmd1 = new OleDbCommand(updateString, objConnection);

            // 2. Set the Connection property
            cmd1.Connection.Open();

            // 3. Call ExecuteNonQuery to send command
            str = cmd1.ExecuteScalar().ToString();
            MessageBox.Show("Status: OUT");
            cmd1.Connection.Close();


        }
        else
        {

            //string str1 = cmd2.ExecuteScalar().ToString();
            //MessageBox.Show("Status: " + str);
            // prepare command string
            string updateString = @"update jiahe set Status = 'IN' where [Tag ID] = '" + textBox1.Text + "'";

            // 1. Instantiate a new command with command text only
            OleDbCommand cmd1 = new OleDbCommand(updateString, objConnection);

            // 2. Set the Connection property
            cmd1.Connection.Open();

            // 3. Call ExecuteNonQuery to send command
            //string str1 = cmd2.ExecuteScalar().ToString();
            str = cmd1.ExecuteScalar().ToString();
            MessageBox.Show("Status: IN");
            cmd1.Connection.Close();
        }

    }

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Вы намереваетесь позвонить ExecuteNonQuery, но вы написали ExecuteScalar

Пожалуйста, проверьте вашу линию

// 3. Call ExecuteNonQuery to send command
str = cmd1.ExecuteScalar().ToString();

Я думаю, это должно быть

// 3. Call ExecuteNonQuery to send command
str = cmd1.ExecuteNonQuery().ToString();
1 голос
/ 03 октября 2011

Выполнить скаляр возвращает первый столбец первой строки выбора.Вы выполняете обновление, лучшим выбором будет использование executetenonquerry.

0 голосов
/ 03 октября 2011

Это вполне вероятно, потому что cmd1.ExecuteScalar() возвращает null, и вы пытаетесь вызвать для него метод ToString(). Запрос UPDATE обычно не возвращает никаких результатов, поэтому вам, вероятно, не следует использовать ExecuteScalar, а ExecuteNonQuery для его выполнения.

...