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개의 좋아요

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

2개의 좋아요

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

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

이게 질문일까요?

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

2개의 좋아요

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

3개의 좋아요

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

1개의 좋아요

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개의 좋아요

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

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

2개의 좋아요

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개의 좋아요

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개의 좋아요