2013-01-08 5 views
0

이것은 이상한 질문이며 제대로 짜 맞춰 주셨으면합니다. Visual Studio DataSet 디자이너를 사용하여 프로젝트를 SQL 서버에 연결하는 SQL 테이블 어댑터를 만듭니다. 연결 문자열은 ODBC 항목을 통해 전달됩니다.DataSet Designer가 서로 다른 테이블에 대해 서로 다른 CommandText를 만듭니다.

모든 테이블에는 update 및 insert와 같은 기본 쿼리가 있습니다. dataset.Designer.cs 파일에서이 명령이 자동 생성됩니다. 내가의 CommandText 라인에 관심이

this._adapter.DeleteCommand = new global::System.Data.Odbc.OdbcCommand(); 
      this._adapter.DeleteCommand.Connection = this.Connection; 
      this._adapter.DeleteCommand.CommandText = "DELETE FROM [pftestbench].[dbo].[TestData_TestGroupInstrument] WHERE (([TestGroup" + 
       "RecordNumber] = ?) AND ([InstrumentSerial] = ?))"; 
      this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text; 
      this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.Odbc.OdbcParameter("Original_TestGroupRecordNumber", global::System.Data.Odbc.OdbcType.BigInt, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "TestGroupRecordNumber", global::System.Data.DataRowVersion.Original, false, null)); 
      this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.Odbc.OdbcParameter("Original_InstrumentSerial", global::System.Data.Odbc.OdbcType.NVarChar, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "InstrumentSerial", global::System.Data.DataRowVersion.Original, false, null)); 

: 여기에 하나의 예입니다

this._adapter.DeleteCommand.CommandText = "DELETE FROM [pftestbench].[dbo].[TestData_TestGroupInstrument] WHERE (([TestGroup" + 
       "RecordNumber] = ?) AND ([InstrumentSerial] = ?))"; 

당신이 데이터베이스 이름에 따라 방법을 볼 수 있으며,이 경우에 바람직하지 않다 어떻게 데이터베이스 이름을 변경합니다. 이제 테이블을 제외한 모든 테이블에서 데이터베이스 이름을 지정합니다. 하지 않는 한 표는이 같은의 CommandText 라인을 가지고 :

this._adapter.DeleteCommand.CommandText = @"DELETE FROM [TestData_Instrument] WHERE (([Serial] = ?) AND ((? = 1 AND [Model] IS NULL) OR ([Model] = ?)) AND ((? = 1 AND [CalibrationDue] IS NULL) OR ([CalibrationDue] = ?)) AND ((? = 1 AND [Trace] IS NULL) OR ([Trace] = ?)) AND ((? = 1 AND [Manufacturer] IS NULL) OR ([Manufacturer] = ?)))"; 

마지막 하나는 독립적 인 데이터베이스 이름 때문에 내가 이상적으로 원하는 것이 무엇인가. 이것이 ODBC를 사용하여 시작하는 이유이지만, 나는 분명히 뭔가를하고있는 것이 아닙니다.

제 질문은 어떻게 이러한 모든 항목이 데이터베이스 이름에 독립적인지 확인하는 것입니다.

+0

무엇을 게시했는지에 따라 데이터베이스 이름이 독립적이라는 것은 무엇을 의미합니까? 예를 들어 vs'[pftestbench]와 같이'[TestData_Instrument]'에 이름 충돌이있을 수는 없습니다. dbo]. [TestData_TestGroupInstrument]'두 개의 다른 테이블을 가리 킵니다. 현재 어떤 오류나 문제가 있습니까? – MethodMan

+0

죄송합니다. 명확히 말씀 드리겠습니다. [TestData_TestGroupInstrument]와 [TestData_Instrument]는 [pftestbench] 데이터베이스의 두 테이블입니다. 기본적으로 [TestData_Instrument]의 경우처럼 [pftestbench]가 나타나기를 원하지 않습니다. – sbenderli

답변

1

불행히도 DataSet 디자이너에서 디자이너/쿼리 빌더를 사용할 때 데이터베이스 이름이나 컨텍스트가 SQL 개체 이름 앞에 추가되는 것을 방지 할 수 없습니다.

각 쿼리의 마법사를 통해 수동으로 제거 할 수 있습니다. 해당 쿼리를 마우스 오른쪽 단추로 클릭하고 "구성 ..."을 선택하십시오. 열리는 마법사에서 쿼리 작성기를 사용하지 않고 [pfttestbench] 및 기타 앞에 추가 된 데이터 (예 : [dbo])를 제거하십시오 (종료시 다시 다시 추가합니다.) 컨텍스트 정보를 제거한 후에는 완료 버튼을 누르십시오.

이 작업을 확인하려면 * .Designer.cs 파일을 강제로 다시 작성해야합니다. 그렇지 않으면 변경 사항이 표시되지 않습니다. 이렇게하려면 솔루션 탐색기에서 .xsd 파일을 마우스 오른쪽 단추로 클릭하고 "사용자 지정 도구 실행"을 선택하십시오. 완료되면 * .Designer.cs 파일을 처음 열 때와 같이 열거 나 수정 한 쿼리의 CommandText 속성을 확인하여 정규화 된 이름 컨텍스트가 제거되었는지 확인할 수 있습니다.

관련 문제