C# wpf에 데이터베이스 연결구문 오류에 대해서 질문드립니다.

특정 경우에 데이터를 삽입하는 경우에 대해서 어려움을 겪어서 질문 드립니다.
수식이 쫌 더럽지만, 양해 부탁드리겠습니다.
visual studio를 통해 코드를 작성하였고, 데이터 베이스는 postgresql을 사용합니다.

바로 아래는 postgresql에서 구문삽입을 한 경우입니다.
이는 올바르게 작동하여 삽입되는 것을 확인 할 수 있었습니다.
INSERT INTO alarm (‘ID’,‘NAME’,‘LEVEL’,‘ZONE’,‘STATUS’,‘MESSAGE’,‘DATATAG_NAME’,‘DATATAG_VALUE’,‘ACK_YN’,‘CTIME’, ‘OTIME’) VALUES (1,‘{rrrr}’, ‘{11,11}’, ‘{11}’, ‘{1123}’, ‘{경보입니다}’, ‘{asdfs}’,‘{234234.12}’, ‘{N}’,NOW(),‘2023-12-18 09:07:52.214’)

아래의 사진은 저의 칼럼 데이터 타입입니다(멋 모르고 이 자동데이터크기조절인 줄 알고 하였습니다.]

아래는 동일하게 visual studio에서 실행한 구문입니다.

string insertSql = “INSERT INTO alarm (‘ID’,‘NAME’,‘LEVEL’,‘ZONE’,‘STATUS’,‘MESSAGE’,‘DATATAG_NAME’,‘DATATAG_VALUE’,‘ACK_YN’,‘CTIME’, ‘OTIME’) VALUES (1,‘{rrrr}’, ‘{11,11}’, ‘{11}’, ‘{1123}’, ‘{경보입니다}’, ‘{asdfs}’,‘{234234.12}’, ‘{N}’,NOW(),‘2023-12-18 09:07:52.214’)”;

동일하게 실행을 하였지만, 오류번호 42601로 구문오류가 id 근처라고 뜹니다.
interger타입이기에 더더욱 문제가 없어야 한다고 생각하는데 오류가 떠서 당황스럽습니다.

어떻게 해결하면 될까요?

2 Likes

insert 쿼리 앞뒤에 " 쌍따옴표가 이상하네요…

2 Likes

안녕하세요. 닷넷데브 관리자입니다.

원본이 이렇게 질문을 하고 계신데…

이게 질문일까요?

질문을 하시기 전에 제목과 내용을 먼저 명확하게 해주시기 바라고, 추후 이용 시에는 카테고리를 분류해서 질문 해주시기 바랍니다.

2 Likes

수정하였습니다 ! 한번 검토해주시면 감사하겠습니다.

3 Likes

질문을 수정하였습니다. 쌍따옴표부분은 visual studio쪽 구문으로 삽입해주는 쪽이라서 붙어있는건데… 혹시 다른 부분을 언급하시는 걸까요?

1 Like

string insertSql = “INSERT INTO alarm (‘ID’,‘NAME’,‘LEVEL’,‘ZONE’,‘STATUS’,‘MESSAGE’,‘DATATAG_NAME’,‘DATATAG_VALUE’,‘ACK_YN’,‘CTIME’, ‘OTIME’) VALUES (1,‘{rrrr}’, ‘{11,11}’, ‘{11}’, ‘{1123}’, ‘{경보입니다}’, ‘{asdfs}’,‘{234234.12}’, ‘{N}’,NOW(),‘2023-12-18 09:07:52.214’)”;

이건 C# 문장 인데 컬럼명에 홑따옴표가 없어야 하지 않을까요…

2 Likes

postgresql에서 칼럼을 대문자로 입력을 했을 경우, 저렇게 따옴표로 해야 인식을 하더라요.
따옴표를 안 붙이고 ID로만 하면 칼럼을 못 찾더라구요.

tip) postgresql을 사용하여 컬럼을 만들시엔 소문자로 하시는 게 낫습니다!

2 Likes

INSERT INTO alarm ("ID", "NAME" ~~~~~);

postgresql 에서는 대문자 표시를 큰따옴표로 해야 한다고 GPT가 …

using Npgsql;
using System;

class Program
{
    static void Main()
    {
        string connectionString = "your_connection_string_here";
        int id = 1;
        string name = "{rrrr}";

        using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
        {
            connection.Open();

            string insertSql = "INSERT INTO alarm (\"ID\", \"NAME\") VALUES (@id, @name)";

            using (NpgsqlCommand command = new NpgsqlCommand(insertSql, connection))
            {
                command.Parameters.AddWithValue("@id", id);
                command.Parameters.AddWithValue("@name", name);

                int rowsAffected = command.ExecuteNonQuery();
                Console.WriteLine($"{rowsAffected} row(s) inserted.");
            }
        }
    }
}

2 Likes

postgresql은 한번도 사용해본적이 없습니다만…
한번쯤은 사용해보고 싶던 데이타베이스입니다.

여하튼, 저는 닷넷 인터랙티브 노트북으로 sqlkata를 이용해서 테스트해봤습니다.
에러 발생 이유는 모르겠지만, 너무 raw한 sql을 사용하시는 것 같아 참고로 봐주시면 좋을듯합니다.
그리고, 테이블, 칼럼을 대문자로 생성했더라도 소문자로 사용하니 이상이 없네요.

#r "nuget: SqlKata"
#r "nuget: SqlKata.Execution"
#r "nuget: Npgsql"

using System.Data.SqlClient;
using SqlKata;
using SqlKata.Compilers;
using SqlKata.Execution;
using Npgsql; 

var _Conn1 = new NpgsqlConnection("Host=192.168.0.10:23855;Username=root;Password=1234;Database=test");
var _Compiler1 = new PostgresCompiler();

var _QueryFactory1 = new QueryFactory(_Conn1, _Compiler1);

var _Result = _QueryFactory1.Query("staff_details")
    .Insert(new {
    id = 1,
    name = "test man"
    });

image

2 Likes