2009-08-28 13 views
1

クエリを実行する前にすべてのラベリング名を格納する配列を使用して、多値入力パラメータ(ラボ名のセット)を使用するt-sqlクエリを使用する.aspxページで作業しています。 。T-SQLクエリ内の多値パラメータ

私は以下のクエリのパラメータを持っています。

 With c.Parameters 
     .Add(New SqlParameter("@sdate", sdate.text)) 
     .Add(New SqlParameter("@edate", edate.text)) 
     .Add(New SqlParameter("@labname", SqlDbType.Text)).Value = labnamesparam.ToString 
    End With 

しかし、私はまだ1つのlabname(3番目のparamの順番)を見ています。

これに関するご意見はありますか?

+0

@labnameパラメータには何を保持しますか?配列の内容は?区切られた? – Gratzy

+0

はい。私は(lab1、lab2、lab3、..)の@labnameを照会したいと思う。 labnamesparam変数は現在、チェックボックスリストからチェックされた入力値を保持しています。 –

+0

あなたのコードのほんの少しはいいと思いますが、SQLの単純な例では、期待するタイプを見て、C#の関数パラメータも見ることができます。labnamesparamの定義方法を見ることができます。 – AnthonyWJones

答えて

1

配列のコンテストをストリングにする必要があります。ここにはC#の例がありますが、それを行う唯一の方法ではありません。

 System.Text.StringBuilder k = new System.Text.StringBuilder(); 
     foreach (string x in LABNAMES) { 
      k.Append(x); 
      k.Append(","); 
     } 
     .Add(New SqlParameter("@labname", SqlDbType.Text)).Value =k.ToString(); 

このような動的in節はできませんが、SQLを変更する必要があります。古いトリックですが、良い習慣ではない、文字列にSQL全体を有効にし、1つを実行します。

+0

私はそれを私のVBコードのように書いています: Dim l As System.Text.StringBuilder l =新しいSystem.Text.StringBuilder Dim x As Integer x = 0の場合サイズ - 1 l.Append( " ' ") l.Append(labnamesparam(X)) l.Append("'") もしx <サイズ - 1次に l.Append( "") エンド次にもし –

0

文字列の配列を渡し、T-SQLの "IN"操作を実行する場合は、ストアドプロシージャで少し作業を行う必要があります。

This articleは非常に良い例です。

0

SQL Server 2008を使用している場合は、「テーブル値パラメータ」(TVP)機能を使用できます。

基本的には、SQL Server 2008では、ユーザー定義テーブル型を定義する必要があります。

CREATE TYPE Customer AS 
    TABLE (id int, CustomerName nvarchar(50), postcode nvarchar(50)) 

をしてから使用することをパラメータとして、ストアドプロシージャで:

CREATE Procedure AddCustomers(@customer Customer READONLY) 

そして、あなたのC#コードでは、同じ構造の変数DataTableを作成し、それを入力パラメータとして使用します。そうすれば、任意の数の値と好きな構造を渡すことができます。

より多くの情報と豊富なコードサンプルのためのこれらの優れたブログの記事を参照してください:

マルク・

2

SQL 2008の場合は、あなたの使用する必要がありますTVP、Marcによって推奨される。

SQL 2005の場合、XMLを使用するかカンマ区切りリストを使用するなどのいくつかの手法があります。各技術の包括的な分析は、http://www.sommarskog.se/arrays-in-sql-2005.htmlのErland Sommarskogによって保たれています。

SQL 2000の場合、オプションの数は少なく、Erlandにはそれぞれの詳細な説明がArrays and Lists in SQL Server (SQL 2000 and Earlier)にあります。

Erlandの記事を長年にわたって参考にしています。