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
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());
}
}
}
Nasıl SQL Server SQL Yürüt Geliştirici...
Nasıl saklı yordam son değiştirme veya...
SQL Server Saklı Yordam, fonksiyon vs....
Arama SQL Server Saklı Yordam Metin...
Nasıl DbContext kullanmak için.Veritab...