SORU
17 AĞUSTOS 2011, ÇARŞAMBA


C# SQL Server saklı yordam için bir liste Geçen

Benim C den bir SQL Server saklı yordam arıyorum# kod:

using (SqlConnection conn = new SqlConnection(connstring))
{
   conn.Open();
   using (SqlCommand cmd = new SqlCommand("InsertQuerySPROC", conn))
   {
      cmd.CommandType = CommandType.StoredProcedure;

      var STableParameter = cmd.Parameters.AddWithValue("@QueryTable", QueryTable);
      var NDistanceParameter = cmd.Parameters.AddWithValue("@NDistanceThreshold", NDistanceThreshold);
      var RDistanceParameter = cmd.Parameters.AddWithValue(@"RDistanceThreshold", RDistanceThreshold);

      STableParameter .SqlDbType = SqlDbType.Structured;
      NDistanceParameter.SqlDbType = SqlDbType.Int;
      RDistanceParameter.SqlDbType = SqlDbType.Int;

      // Execute the query
      SqlDataReader QueryReader = cmd.ExecuteReader();

Benim saklı proc oldukça standarttır ama QueryTable ile katılın (dolayısıyla bir saklı yordam kullanarak) yapar.

Şimdi: dizeleri listesi, List<string> parametre ayarlamak için eklemek istiyorum. Örneğin, saklı yordam sorguyu şöyle:

SELECT feature 
FROM table1 t1 
INNER JOIN @QueryTable t2 ON t1.fid = t2.fid 
WHERE title IN <LIST_OF_STRINGS_GOES_HERE>

Ancak, dizeleri listesini dinamik ve birkaç yüz uzun.

Orada saklı proc List<string> dizeleri listesini geçirmek için bir yol var mı???Yoksa daha iyi bir yolu bunu yapmak için?

Çok teşekkürler, Brett

CEVAP
17 AĞUSTOS 2011, ÇARŞAMBA


Eğer SQL Server kullanıyorsanız yeni bir özellikli var 2008, bir Kullanıcı Tanımlı Tablo Türü denir. Burada kullanmak için nasıl bir örnek:

Masa Türü Tanımlı: Kullanıcı oluşturun

CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);

Sonraki düzgün saklı yordamı kullanmanız gerekir:

CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Just return the items we passed in
    SELECT l.Item FROM @list l;
END

Sonunda burada c kullanmak için bazı sql#:

using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        var table = new DataTable();
        table.Columns.Add("Item", typeof(string));

        for (int i = 0; i < 10; i  )
            table.Rows.Add("Item "   i.ToString());

        var pList = new SqlParameter("@list", SqlDbType.Structured);
        pList.TypeName = "dbo.StringList";
        pList.Value = table;

        cmd.Parameters.Add(pList);

        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro Pos

    21 ŞUBAT 2013
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010
  • SunsetTrance

    SunsetTrance

    20 EYLÜL 2008