Npgsqlexception error code

The exception that is thrown when server-related issues occur.

The exception that is thrown when server-related issues occur.

Inheritance

NpgsqlException

Implements

Inherited Members

Namespace: Npgsql
Assembly: Npgsql.dll
Syntax
[Serializable]
public class NpgsqlException : DbException, ISerializable

Constructors


|
Improve this Doc


View Source

NpgsqlException()

Declaration


|
Improve this Doc


View Source

NpgsqlException(SerializationInfo, StreamingContext)

Initializes a new instance of the NpgsqlException class with serialized data.

Declaration
protected NpgsqlException(SerializationInfo info, StreamingContext context)

Parameters
Type Name Description
SerializationInfo info

The SerializationInfo that holds the serialized object data about the exception being thrown.

StreamingContext context

The StreamingContext that contains contextual information about the source or destination.


|
Improve this Doc


View Source

NpgsqlException(String, Exception)

Initializes a new instance of the NpgsqlException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Declaration
public NpgsqlException(string message, Exception innerException)

Parameters
Type Name Description
String message

The error message that explains the reason for the exception.

Exception innerException

The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.


|
Improve this Doc


View Source

NpgsqlException(String)

Initializes a new instance of the NpgsqlException class with a specified error message.

Declaration
public NpgsqlException(string message)

Parameters
Type Name Description
String message

The message that describes the error.

Properties


|
Improve this Doc


View Source

BatchCommand

If the exception was thrown as a result of executing a DbBatch, references the DbBatchCommand within
the batch which triggered the exception. Otherwise null.

Declaration
public NpgsqlBatchCommand BatchCommand { get; set; }

Property Value
Type Description
NpgsqlBatchCommand
Remarks


|
Improve this Doc


View Source

IsTransient

Specifies whether the exception is considered transient, that is, whether retrying the operation could
succeed (e.g. a network error or a timeout).

Declaration
public virtual bool IsTransient { get; }

Property Value
Type Description
Boolean

Implements

Вопрос:

Я использую Entity Framework, поэтому считаю, что я должен поймать NpgsqlException поскольку это поставщик данных.NET для PostgreSQL. Поэтому позвольте сказать, что я делаю запрос к контексту. Если таблица не существует в базе данных PostgreSQL, я хочу уловить созданное исключение, а затем вручную создать его. Ниже приведен пример того, как объект вставлен, и я попытался использовать обработку ошибок для создания таблицы, если это необходимо:

try
{
return _context.Set(entityType).Add(entity);
}
catch (NpgsqlException)
{
CreateEntityTable(entity); //a private method I made
return _context.Set(entityType).Add(entity);
}

Проблемы:

  • Я не уверен на 100%, я должен поймать NpgsqlException

  • Я хочу быть уверенным, что если исключение выбрано, это потому, что таблица не существует. Я просмотрел документацию по ошибкам PostgreSQL и код ошибки 42P01 – это неопределенная таблица. Я считаю, что хочу использовать это, но как? Я просмотрел членов класса NpgsqlException и нашел ErrorCode. Однако, что тип int. Было бы неплохо, если бы я мог изменить код выше, чтобы выглядеть следующим образом:

    try
    {
    return _context.Set(entityType).Add(entity);
    }
    catch (NpgsqlException ex)
    {
    if (ex.ErrorCode.Equals(42P01))
    {
    CreateEntityTable(entity); //a private method I made
    return _context.Set(entityType).Add(entity);
    }
    }
    

Но я не уверен, что это имеет смысл (я даже не знаю, как 42P01 может быть int).

Любая помощь будет оценена по достоинству.

Лучший ответ:

Вы захотите использовать свойство Code для NpgsqlException, поскольку оно будет содержать код ошибки PostgreSql.

Обновление вашего примера:

try
{
    return _context.Set(entityType).Add(entity);
}
catch (NpgsqlException ex)
{
    if (ex.Code == "42P01")
    {
        CreateEntityTable(entity); //a private method I made
        return _context.Set(entityType).Add(entity);
    }
}

В стороне, я бы предположил, что вы не выполняете обновления схемы в своем обычном коде. Только делайте что-то подобное в установщике или при запуске в качестве обновления.

Alex1333

0 / 0 / 0

Регистрация: 15.06.2017

Сообщений: 6

1

15.06.2017, 22:17. Показов 10058. Ответов 5

Метки нет (Все метки)


Здравствуйте, у меня возникла такая проблема. На сервере PostgreSQL 9.3 создана база данных, в ней 5 таблиц. При попытке отображения данных из бд в datagridview возникает ошибка
:Npgsql.PostgresException: «Внешний компонент создал исключение.»+ $exception {«42601: syntax error at or near «order»»} Npgsql.PostgresException.
В строке da.Fill(ds, «order»);
В программировании новичок . Подскажите в чем проблема ?

Добавлено через 1 минуту

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string conString = "Server = localhost; Port = 5432;  Database = Database; " + "User ID = postgres; Password = 12345;";
          
 
 private void button1_Click(object sender, EventArgs e)
        {
            NpgsqlConnection con = new NpgsqlConnection(conString);
            con.Open ();
            
                NpgsqlDataAdapter da = new NpgsqlDataAdapter("SELECT * FROM  order; ", con);
 
 
 
 
                NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(da);
                DataSet ds = new DataSet();
               da.Fill(ds, "order");
                dataGridView1.DataSource = ds.Tables[0];
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



YuryK

1039 / 855 / 335

Регистрация: 08.12.2016

Сообщений: 3,283

16.06.2017, 00:01

2

Лучший ответ Сообщение было отмечено Alex1333 как решение

Решение

потому что ORDER — это служебное слово SQL

SQL
1
SELECT * FROM  ORDER ORDER BY id

а вы таблицу так назвали. Полагаю 4 остальные называются SELECT, FROM, DELETE и INSERT?



1



Alex1333

0 / 0 / 0

Регистрация: 15.06.2017

Сообщений: 6

16.06.2017, 05:56

 [ТС]

3

Спасибо помогло) Не знал.Остальные называю по другому. Ещё есть вопрос.
Есть форма виндовс с текстбоксами и датапикерами, нужно заносить информацию в бд по нажатию батона. Возникает такая же ошибка 4206 syntax error at o near «.2017»

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void buttonSave_Click(object sender, EventArgs e)
        {
 
            using (NpgsqlConnection con = new NpgsqlConnection(conString))
            {
                try
                {
                    con.Open();
                    NpgsqlCommand cmd = new NpgsqlCommand ( "INSERT INTO table1 VALUES (  '" + comboBox1.Text + "','" + textBoxName.Text + "'," + dateTimePicker2.Value + ",  " + Convert.ToInt32(textBoxNumber.Text) + ", " + dateTimePicker1.Value + "," + dateTimePicker2.Value + " ))");
 
                    cmd.Connection = con;
                    cmd.ExecuteNonQuery();
                        
                    con.Close();
                }
                catch (NpgsqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

Добавлено через 3 часа 35 минут
Не тот код скинул, 42601 syntax error at and of input
как быть ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private void buttonSave_Click(object sender, EventArgs e)
        {
            try
            {
                NpgsqlConnection con = new NpgsqlConnection(conString);
 
 
                NpgsqlDataAdapter ad = new NpgsqlDataAdapter();
                NpgsqlCommand com = con.CreateCommand();
                con.Open();
 
                com.CommandText = String.Format("INSERT INTO table1 (Продукция, Клиент, Телефон, Дата, Срок)", comboBox1.Text, textBoxName.Text, Convert.ToInt64(textBoxNumber.Text), dateTimePicker1.MinDate, dateTimePicker2.MinDate);
 
                com.ExecuteNonQuery();
 
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }



0



YuryK

1039 / 855 / 335

Регистрация: 08.12.2016

Сообщений: 3,283

16.06.2017, 11:12

4

Цитата
Сообщение от Alex1333
Посмотреть сообщение

Не тот код скинул

в том хоть смысл был, а ошибка из-за того, что дату, указываемую как текстовую константу, тоже надо обрамлять кавычками
нам же надо получить строку вида

SQL
1
INSERT INTO table1 VALUES (  'ааа','ббб','2017-06-16' , 5, '2017-06-01','2017-06-16')

вот и соберите такую строку
ведь ваше dateTimePicker2.Value никак не даст ‘2017-06-16’ как и Convert.ToInt32(textBoxNumber.Text) не даст символ 5

а как второй вариант кода сформирует нужную строку, вообще не представляю.



1



1187 / 917 / 367

Регистрация: 02.09.2012

Сообщений: 2,793

16.06.2017, 16:15

5

и еще заметил, что отсутствует слово VALUES после перечисления имен столбцов.
и русские буквы нужно в двойные кавычки взять. в строки их нужно через экарнирование делать, как-то так в C# должно быть «»»
и ключевые слова также можно использовать в качестве имен, если взять в двойные кавычки.



0



0 / 0 / 0

Регистрация: 15.06.2017

Сообщений: 6

18.06.2017, 17:21

 [ТС]

6

Спасибо, разобрался.



0



Понравилась статья? Поделить с друзьями:

Читайте также:

  • Npfs sys windows 10 как исправить
  • Np 41772 1 ошибка ps4 как исправить
  • Np 41397 4 ps4 ошибка
  • Np 40833 8 ошибка ps4
  • Np 37614 1 ps4 ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии