2009-12-24 4 views
2

사용자가 연결 문자열과 공급자를 제공하여 다양한 데이터베이스에 액세스 할 수있는 .NET 응용 프로그램이 있습니다..NET 커넥터를 사용하여 MySQL 데이터베이스에 액세스 할 때 "Guid에 32 자리와 4 개의 대시가 포함되어야합니다."

사용자가 액세스하려는 데이터베이스 중 하나는 기본 키가 모두 GUID로 저장되는 MySQL 데이터베이스입니다 (변경할 수는 없으므로 변경할 수 없음).

내 응용 프로그램은 MySQL ODBC 3.51 드라이버를 사용할 때 해당 데이터베이스의 여러 테이블에있는 레코드에 액세스 할 수 있습니다.

그러나 동일한 코드를 사용하면 (ODBC에 매개 변수 이름 대신?가 필요하고 .NET 커넥터에는 "@name"구문이 필요함을 고려하면) 동일한 테이블에서 동일한 레코드를 읽으려고합니다 하지만 이번에는 MySQL .NET Connector (V6.1.3과 v6.2.2)를 사용하면 "Guid에 32 자리 4 개의 대시가 있어야합니다 ..."라는 오류 메시지가 나타납니다.

.NET Connector에 문제가 있습니까? 아니면 작동시키기 위해 뭔가를 지정해야합니까?

+0

어떻게 .NET 드라이버가 GUID인지 알 수 있습니까? GUID는 원시 MySQL 데이터 유형이 아니므로 테이블 구조에서 추론 할 수 없습니다. –

+0

guid가 포함 된 열은 어떻게 지정되며 실패한 쿼리는 어떻게 보이나요? – nos

+0

롤랜드 : 좋은 질문입니다! 나는 그 대답을 알고 싶다. 앞에서 말했듯이 이것은 다른 사람의 데이터베이스가 아니므로 SELECT WHERE id = @paramName 호출을 실행합니다. ODBC 드라이버를 사용하여 데이터를 검색 할 수 있었기 때문에 ID가 GUID임을 알았고 GUID처럼 보입니다. – Peter

답변

5

글쎄, 조금 정찰을 한 후, MySQL이 나중 버전보다 .NET Connector를 출시했는지 알았을 것이라고 생각했습니다. 나는 https://dev.mysql.com/downloads/connector/net/을 찾았다. 그건 내가받은 오류에 대해 말하고, 연결 문자열에서 "old guids = true"옵션에 대해 이야기합니다 (언제 어떻게 사용해야하는지는 말하지 않지만 버전에서는 제대로 작동하지 않습니다). 6.1.3).

"oldguids = true"를 연결 문자열에 넣으려고했는데 일반적인 응용 프로그램이 작동했습니다.

4

나는 동일한 문제가 있었지만, 이것은 Char(36) 유형의 변수를 선언하고 (커넥터를 추측하고있는) MySql이이를 GUID로 해석하고있는 저장 프로 시저로 인해 발생했습니다. 그래서 크기를 37 (또는 무엇이든)로 바꾸면 효과가있었습니다.

+0

정확하게! 이것은 몇 시간 동안 나를 직장에서 지켰다! – nawfal

+0

@nawfal 도움이 된 것을 기쁘게 생각합니다. :) –