텍스트 / 바이트 호스트 변수 사용 시도가 잘못되었습니다 - TEXT 열에 삽입

c# dapper informix odbc

문제

Dapper를 통해 표 (텍스트 열)에 삽입하고 Informix에서 오류를 가져 오는 중 :

Illegal attempt to use Text/Byte host variable

나는 이것을 시뮬레이션하기 위해 작은 프로그램을 작성했으며, 여전히 문제에 반대하고있다.

Informix 드라이버는 우리의 요구에 맞지 않기 때문에 현재 사용할 수 없습니다.

using Dapper;
using System;
using System.Data.Odbc;
namespace DapperParamsTest
{
    class Program
    {
        static void Main(string[] args)
        {
            OdbcConnection conn = new System.Data.Odbc.OdbcConnection("Driver={IBM INFORMIX ODBC DRIVER (64-bit)}; Host=bylgia; Server=bylgia; Service=sqlexec; Protocol=onsoctcp; Database=DATABASE; Client_Locale=en_US.CP1252; DB_LOCALE=en_GB.1252");

            var dynParams = new DynamicParameters();

            dynParams.Add("np_c_ref",-1);
            dynParams.Add("np_np_type","T");
            dynParams.Add("np_text", System.Text.Encoding.Default.GetBytes("TEXT INPUT"), System.Data.DbType.Binary);

            conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?,?,?)",dynParams);

            Console.WriteLine("Written");
            Console.ReadLine();
        }
    }
}

테이블 구조 :

CREATE TABLE notepad
(
    np_c_ref int,
    np_type char(1),
    np_text TEXT
)

수락 된 답변

이 질문은 실제로 다른 답변이 추정하는 것보다 훨씬 간단 할 수 있습니다. 나는 당신이 칼럼이 TEXT 라고 말한 것을 보았습니다, 그렇지만 그것은 byte[] 전달하고 있습니다. 원하는 경우 BYTE 데이터 형식을 사용해야합니다. TEXT 를 사용하려면 string (즉, "TEXT INPUT" )을 전달하고 Encoding 잊어 버리십시오.


전문가 답변

이 설정을 다시 작성해야 할 설정이 무엇인지 알 수 없지만 ... 시도해 볼 항목이 있습니다.

Informix는 위치 매개 변수를 원합니다. 최근의 dapper 빌드는 실제로 이것을 수정하기 위해 수정 된 구문을 지원합니다. 너 시도 할 수있어:

conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?np_c_ref?,?np_np_type?,?np_text?)",dynParams);

또한 : "T" (문자 대 문자열) 대신 'T' 를 사용해보십시오.

문제가 매개 변수 순서 인 경우 도움이 될 수 있습니다. 참고 사항 :이 방법이 효과적이라면 더욱 익명의 유형 접근 방식을 사용하여 매개 변수를 지정할 수도 있습니다.

conn.Execute("INSERT INTO notepads (np_c_ref, np_type,np_text) VALUES (?np_c_ref?,?np_np_type?,?np_text?)",
new { np_c_ref = -1, np_np_type = "T",
    np_text = System.Text.Encoding.Default.GetBytes("TEXT INPUT")
});

최종 최종 아이디어 : Encoding.Default 가 올 바르거나 적절하다는 시나리오는 거의 없습니다. 실수로 제외하고는 거의 사용되지 않습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.