2009-06-15 4 views
1

Visual Studio 2008에서 입력 값으로 테이블 반환 UDT 매개 변수를 사용하는 SQL 저장 프로 시저를 실행하려고합니다. Visual Studio 2008에서이 매개 변수를 추가했지만이 프로그램을 실행하면 "ArgumentException - 지정된 형식이 대상 서버에 등록되지 않았습니다."라는 메시지가 나타납니다. 그래서 나는이 문제를 탐색하고 Visual Studio 2008에서 SQL Server 2008에서이 테이블 형식의 속성과 일치하는 새 클래스를 만들어야한다고 생각합니다. UDT 's와 관련된 인터넷에서 예제를 찾을 수 없습니다. 그리고 모든 스칼라 UDT 예제를 시도했지만 테이블 기반으로 만들기 위해이를 수정하는 방법을 모르고있었습니다.
SQL Server 2008로 형식을 가져 오는 경우에만 필요하거나 Visual Studio로 형식을 가져 오는데도 사용할 수 있는지 여부는 알 수 없지만 어셈블리를 만들어야 할 수도 있습니다. BTW, VS 2008에서 서버 탐색기에서 나열된 모든 유형을 볼 수 있지만 데이터베이스 및 해당 SP 참조하십시오. 데이터베이스 새로 고침을 시도했지만 형식이 여전히 표시되지 않았습니다. 내가해야 할 일은 간단합니다. 나는 테이블 UDT과 같이 있습니다sql table udt, vs 2008, csharp

CREATE TYPE [dbo].[parseInputFile] AS TABLE(
[NumCols] [int] IDENTITY(1,1) NOT NULL, 
[strRow] [varchar](500) NOT NULL, 
PRIMARY KEY CLUSTERED 

그리고 내 C# 코드에서 코드는 다음과 같습니다

public static int AppendData(string[] myStringArray) 
    { 
      SqlConnection conn = new SqlConnection(connString); 
      SqlCommand cmd = conn.CreateCommand(); 
      cmd.CommandText = "dbo.uspAppendTableFromInput"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Connection = conn; 
      SqlParameter param = cmd.Parameters.Add("@InputFileParam", SqlDbType.Udt); 
      param.UdtTypeName = "AdventureWorks.dbo.parseInputFile"; 
      param.Value = myStringArray; 
      conn.Open(); 
      RowsAffected = cmd.ExecuteNonQuery(); 

이 프로그램을 실행 한 후 영향을받는 영 행을 보여 RowsAffected. 내가 뭘 놓치고 있니? 이 간단한 예를 보여주는 웹 사이트를 가리킬 수 있습니까? 아니면 팁을 주시겠습니까? 나는 또한 시도했다 'param.UdtTypeName = "parseInputFile";' 위의 스 니펫에 대해서는이 오류가 반환되었습니다. BTW, "myStringArray"본질적으로 테이블입니다. 일련의 문자열입니다. 예 : myStringArray [0] = "Hello | Bob | How | Do", myStringArray [1] = "I | Am | Fine | And"등

+0

예 @ http://stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause/337864#337864 – ahains

+0

무엇합니까처럼 저장된 프로 시저 모양? 대체로 선언 한 매개 변수의 목록 –

+0

정확히 무엇을 달성하려고합니까? 사용자 정의 테이블 형식의 매개 변수 집합을 사용하여 저장된 proc을 호출 하시겠습니까? 또는 저장된 proc을 호출하여 테이블을 반환합니다. 확실히 명확하지 않다 ... –

답변

2

기본적으로,

TVP의 테이블 값 매개 변수에 대한 소개 글을 확인해보십시오. 사용하고자하는 것은 바로 GUESS입니다. 맞습니까?

는 기본적으로 무엇을 당신이해야 할 것은 이것이다 :

  • 사용자 정의 테이블 형식을 만들 - 당신에게 이미 가지고있다
  • 이러한 테이블 형식을 READONLY 입력 매개 변수로 사용하는 저장 프로 시저를 만듭니다 (s 만약 당신이 이것을 가지고 있다면 - 아직 당신의 코드를 보지 못했다.)
  • . 그 DataTable을
  • 는도록 SqlConnection을 만들 채울
  • 및 SqlCommand를 (CommandType을의 = 저장된 프로 시저 - 당신은 DataTable의 인스턴스를 생성합니다 (SQL 팀 자료에 나타난 분야의 용어와 종류)와 동일한 구조를 다시 작성해야) .NET에서 "SqlDbType.Structured"형식의 테이블 형식 매개 변수를 정의하고 그 값을 위에 만든 DataTable에 설정합니다
  • proc (.NET에서 SqlCommand에 패키지 됨)를 호출하는 호출

도움이 될까요? SQL 팀 기사를 강력히 추천합니다. 매우 유익합니다.

마크

+0

이것이 정말로 작동하는지 알기위한 테스트 – salvationishere

+0

팁, Marc에 감사드립니다! 방금이 같은 문제에 관한 또 다른 질문을 올렸습니다. 이 웹 사이트에 약간의 문제가있어서 다른 질문으로 게시했습니다. 그 다른 질문을 봐 주시겠습니까? 지금은이 웹 사이트에 두 가지 질문 만 게시 했으므로 찾기 쉽습니다. 감사. – salvationishere