2009-10-20 5 views
2

기존 ASP 웹 응용 프로그램을 사용하는 Windows Server 2003에서 IIS에 문제가 있습니다. 데이터베이스 서버 (SQL Server 2005)가 동일한 컴퓨터에 있습니다. 다음과 같이연결 문자열 오류

나는 레코드를 생성하고 그의 ActiveConnection을 설정

Dim RS 
Set RS = Server.CreateObject("ADODB.Recordset") 
RS.ActiveConnection = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;" 

문제는 최대한 빨리이 연결 문자열을 설정 한 다음과 같은 오류가 발생한다는 것입니다 :

인수는의이다 잘못된 유형이거나, 허용 범위를 벗어 났거나, 서로 충돌하고 있습니다.

내 개발 서버를 사용할 때 원격 데이터베이스에 연결을 가리킬 수 있기 때문에이 연결 문자열에는 문제가 없다는 것을 알고 있습니다.

나는 (connectionstrings.com에서) 많은 MANY 연결 문자열 변형을 시도했으며 동일한 오류가 발생했습니다.

+0

프로덕션 서버에서 .udl 파일을 만들고 해당 연결 문자열을 작성하십시오. 어쩌면 당신은 다른 패키지가 설치되어있을 수도 있습니다. –

답변

1

@RobV - 연결 개체 만들기 및 레코드에 그러나,이에 대한 바로 가기가 레코드에 연결 문자열 지정되어, 참으로 옵션입니다 할당 - 작업을 수행합니다. 사실

다음 코드는 가장 효율적인 :

Dim RS 
Set RS = Server.CreateObject("ADODB.Recordset") 
RS.Open <sqlstatement>, <connectionstring> 

임 확실하지 내가지고 있던 오류가 발생하지만 갑자기 그냥 코드를 변경하지 않고 중단 무엇을!

+0

하나의 데이터베이스 호출 만하고 그 다음에는 그렇게하는 것이 간결 할 수도 있지만 열지 않은 각 레코드 집합에 대해 데이터베이스 연결을 생성하게됩니다. MSDN에서 " 그러나 동일한 연결을 통해 여러 Recordset 개체를 여는 경우 Connection 개체를 명시 적으로 만들고 열어야 연결 개체를 개체 변수에 할당 할 수 있으며 ADO는 Recordset 개체를 열 때이 개체 변수를 사용하지 않으면 동일한 연결 문자열을 전달하는 경우에도 각 새 Recordset에 대한 새 Connection 개체. " – RobV

+0

하지만 네가 ActiveConnection을 문자열로 설정할 수 있다고 씁니다. – RobV

+0

범례 - 이것은 (연결 수가 5 개를 초과 할 때 MSDE 작업 부하 관리자로 인해) 시간 초과 오류가 발생하는 이유를 설명 할 수 있습니다. - 감사합니다. – Jimbo

0

MSDN Sample과 비슷한 것을 시도해보십시오.

연결을 별도로 만든 다음 할당하고 있습니다.

1

ActiveConnection 속성은 ADODB.Connection의 Object이며 String이 아닙니다. 연결 문자열을 직접 할당 할 수 없으므로 데이터베이스 연결을 지정해야합니다.

사실
Set objDB = Server.CreateObject("ADODB.Connection"); 
objDB.Open = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;" 
Set objRS = Server.CreateObject("ADODB.Recordset") 
objRS.ActiveConnection = objDB 

당신이 정말로이 모든 방법으로 ActiveConnection 속성을 사용하지 않아야합니다, 당신이 실제로 열려있는 데이터베이스 연결을 유지 피하기 위해 레코드를 분리한다을 위해 사용 해야하는지 : 코드는 다음과 같이해야합니다 unecessarily :

Set objDB = Server.CreateObject("ADODB.Connection"); 
objDB.Open = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;" 

//Get a Recordset and prep it for forward only disconnected use 
Set objRS = Server.CreateObject("ADODB.Recordset") 
objRS.CursorLocation = adUseClient 
objRS.CursorType = adOpenStatic 
objRS.LockType = adLockReadOnly 
objRS.Open "SELECT * FROM SOME_TABLE", objDB 

//Now disconnect the recordset and dispose of the database connection 
Set objRS.ActiveConnection = Nothing 
objDB.Close 
Set objDB = Nothing 

//Now do whatever you want with the Recordset 
//...