2017-12-19 2 views
0

잘못된 데이터 형식을 입력 할 때 ELEVATION EXCEPTION을 표시하도록 만들 수 있는지 알 수 있습니까? 예를 분명히 작동하지 않습니다하지만 당신은 TOP 명령의 포스트 그레스에서 외부 예외를 트리거 할 수 없습니다 C#postgresql에서 데이터 형식의 유효성을 검사하는 RAISE EXCEPTION 만들기

string query = "INSERT INTO products(name_pr, quantity, price) VALUES('" + txtName.Text + "', '" + txtQuantity.Text + "','" + txtPrice.Text + "')"; 
con.Open(); 
comand = new NpgsqlCommand(query, con); 
+0

Em, 데이터가 'smallint'가 아닌 경우 postgres가 맞지 않으므로 어쨌든 예외가 발생합니다. – zaitsman

+0

C# 측에서 유효성 검사는 어떻게해야합니까? Postgres에 실제로 명령을 보내기 전에 수행하려는 작업이 완료된 것처럼 보입니다. 또한 쿼리를 매개 변수화하면 이동하더라도 방탄 상태가됩니다. – Hambone

답변

0

에 삽입 내가

CREATE TABLE products(
    name_pr varchar(20), 
    quantity smallint, 
    price smallint, 
    last_update timestamp, 
    latest_user_bd text 
); 
CREATE OR REPLACE FUNCTION validate_products() 
RETURNS TRIGGER AS 
$BODY$ 
BEGIN 

    IF NEW.price IS NOT SMALLINT THEN 
    RAISE EXCEPTION 'You must enter the Price'; 
    END IF; 

    NEW.last_update = now(); 
    NEW.latest_user_bd = user; 
    RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql; 

CREATE TRIGGER validate_products 
BEFORE INSERT OR UPDATE 
ON products 
FOR EACH ROW EXECUTE PROCEDURE validate_products(); 

예를 찾고 있어요 무엇의 예입니다. PostgreSQL 함수에 매개 변수를 전달할 수 있으며 거기에서 보호 된 블록에서 명령을 실행할 수 있습니다. 거기에서 예외를 처리 할 수 ​​있습니다. Some like

CREATE OR REPLACE FUNCTION new_product(__price text) 
RETURNS void AS $$ 
DECLARE _price smallint; 
BEGIN 
    _price := __price::smallint; 
    INSERT INTO product(..) (_price); 
EXCEPTION WHEN invalid_text_representation, numeric_value_out_of_range THEN 
    IF price IS NULL THEN 
    RAISE EXCEPTION 'the price is not valid smallint value %', _price; 
    END IF; 
END; 
$$ LANGUAGE plpgsql; 

나는이 "형식화되지 않은"기능을 싫어하지만 - 당신이 원하는 것. 초침 PostgreSQL의 유형

는 변형 유형 없으므로 패턴

IF some IS NOT smallint THEN -- has not sense 

는 PLpgSQL에서 넌센스. 당신은 정규 표현식을 사용할 수 있습니다. numeric을 사용하고 제한에 대한 테스트를 수행하거나 smallint로 형변환하여 예외를 잡을 수 있습니다.

PLpgSQL은 엄격한 형식화 된 언어 (PostgreSQL SQL도 있음)이기 때문에 덜 형식화 된 동적 언어의 일부 패턴을 사용할 수 없습니다.

일반적으로 UI 수준에서는 유형과 값을 먼저 확인해야하며 보조 SQL 수준에서는 안전하게 적용해야합니다. SQL 수준은 다시 검사하지만 일반적인 예외가 발생할 수 있습니다. 매개 변수 검사는 프레젠테이션 계층에 더 좋은 작업입니다.

관련 문제