programing

ADO.NET을 사용하여 테이블 값 매개 변수 전달

javajsp 2023. 8. 7. 22:20

ADO.NET을 사용하여 테이블 값 매개 변수 전달

ADO를 사용하여 테이블 값 매개 변수를 저장 프로시저에 전달하는 방법.NET?

  1. SQL Server에 유형 생성:

    CREATE TYPE [dbo].[MyDataType] As Table
    (
        ID INT,
        Name NVARCHAR(50)
    )
    
  2. 생성 절차:

    CREATE PROCEDURE [dbo].[MyProcedure]
    (
        @myData As [dbo].[MyDataType] Readonly
    )
    AS
    
    BEGIN
        SELECT * FROM @myData
    END
    
  3. C#에서 데이터 테이블 만들기:

    DataTable myDataTable = new DataTable("MyDataType");
    myDataTable.Columns.Add("Name", typeof(string));
    myDataTable.Columns.Add("Id", typeof(Int32));
    myDataTable.Rows.Add("XYZ", 1);
    myDataTable.Rows.Add("ABC", 2);
    
  4. SQL 매개 변수 만들기:

    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@myData";
    parameter.SqlDbType = System.Data.SqlDbType.Structured;
    parameter.Value = myDataTable;
    command.Parameters.Add(parameter); 
    

이것을 시도해 보았더니 다음과 같은 예외가 발생했습니다.

테이블 형식 매개 변수 '@MyDataType'에는 올바른 형식 이름이 있어야 합니다.

SqlParameter의 "TypeName" 속성을 설정해야 했습니다.

parameter.TypeName = "MyDataType";

이 질문은 테이블매개 변수를 .net 코드에서 저장 프로시저로 전달하는 방법을 복제한 것입니다.다음 중 하나를 사용하는 예를 보려면 해당 질문을 참조하십시오.DataTable또는IEnumerable<SqlDataRecord>.

다국어 사용자의 경우, 쇼에 조금 늦습니다.

tsql의 다른 곳에

--- create a vector data type
CREATE TYPE [dbo].[ItemList] AS TABLE([Item] [varchar](255) NULL)

b)

Dim Invoices As New DataTable("dbo.ItemList") 'table name is irrelevant
Invoices.Columns.Add("Invoice", GetType(String))
...
        With .SqlCommand.Parameters
            .Clear()
            .Add(New Data.SqlClient.SqlParameter() With {
                        .SqlDbType = Data.SqlDbType.Structured,
                        .Direction = Data.ParameterDirection.Input,
                        .ParameterName = "@Invoices",
                        .TypeName = "dbo.ItemList",
                        .Value = Invoices})
        End With
...
   ' using  store procedure
   .CommandText = "SELECT * FROM dbo.rpt(@invoices) "
   ' or direct reference is a select
   .CommandText = "SELECT * FROM dbo.invoicedata" +
        "where ((select count(*) from @invoices) = 0 or "+
             "InvoiceNumber in (select distinct * from @Invoices)) 

Exec으로 접두사를 붙일 수 있습니다.

using( SqlConnection con = new SqlConnection( "Server=.;database=employee;user=sa;password=12345" ) )
    {
        SqlCommand cmd = new SqlCommand( " exec ('drop table '+@tab)" , con );
        cmd.Parameters.AddWithValue( "@tab" ,"Employee" );
        con.Open( );
        cmd.ExecuteNonQuery( );
    }

언급URL : https://stackoverflow.com/questions/10409576/pass-table-valued-parameter-using-ado-net