집 >데이터 베이스 >MySQL 튜토리얼 >C# 문자열 목록을 SQL Server 저장 프로시저에 전달하는 방법은 무엇입니까?
C#의 SQL Server 저장 프로시저에 목록 전달
질문:
C# 코드의 문자열 목록을 SQL Server 저장 프로시저에 전달해야 합니다. 그러나 이 목록은 동적이며 수백 개의 항목을 포함합니다.
해결책:
사용자 정의 테이블 유형(UDTT) 사용
SQL Server 2008 이상에서는 UDTT(사용자 정의 테이블 유형)를 제공하므로 저장 프로시저에 사용할 사용자 정의 데이터 유형을 생성할 수 있습니다. 다음 단계를 따르세요.
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );</code>
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END</code>
<code class="language-csharp">using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目 { table.Rows.Add("Item " + i); } }</code>
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;</code>
<code class="language-csharp">using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { cmd.Parameters.Add(pList); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }</code>
connstring
를 자신만의 연결 문자열로 바꾸는 것을 잊지 마세요. 이 코드 예제에서는 목록에 1000개의 항목이 포함되어 있다고 가정하므로 실제 목록 크기에 따라 루프를 조정해야 합니다. 또한 SQL Server 인스턴스가 READONLY
매개변수 사용을 활성화했는지 확인하세요.
위 내용은 C# 문자열 목록을 SQL Server 저장 프로시저에 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!