Nasıl saklı yordam için tablo değerli parametreleri geçirmek için .net kodu
MS SQL Server 2005 veritabanı var. Birkaç operasyon bir nvarchar olarak bir saklı yordam (virgülle ayırarak) önünden geçtiğim bir tablo parametreleri ve içten tek değerler bölün. Bu gibi SQL komutu parametreleri listesine ekliyorum:
cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";
Veritabanı göç için SQL Server 2008 var. Tablo değerli parametreleri olduğunu biliyorum, ve saklı yordamları onları nasıl kullanacağımı biliyorum. Ama bir SQL komutu parametreleri listesine bir tane geçirmek için nasıl bilmiyorum.
Herkes Parameters.Add
prosedürünün doğru sözdizimi biliyor mu? Yoksa bu parametre geçirmek için başka bir yol var mı?
CEVAP
DataTable
, DbDataReader
, ya da 7* *nesne tablo değerli TechNet makale başına parametre Table-Valued Parameters in SQL Server 2008 (ADO.NET) doldurmak için kullanılabilir.
Aşağıdaki örnek, ya da DataTable
IEnumerable<SqlDataRecord>
: Bir bir kullanarak gösterir
SQL Kodu
CREATE TABLE dbo.PageView
(
PageViewID BIGINT NOT NULL CONSTRAINT pkPageView PRIMARY KEY CLUSTERED,
PageViewCount BIGINT NOT NULL
);
CREATE TYPE dbo.PageViewTableType AS TABLE
(
PageViewID BIGINT NOT NULL
);
CREATE PROCEDURE dbo.procMergePageView
@Display dbo.PageViewTableType READONLY
AS
BEGIN
MERGE INTO dbo.PageView AS T
USING @Display AS S
ON T.PageViewID = S.PageViewID
WHEN MATCHED THEN UPDATE SET T.PageViewCount = T.PageViewCount 1
WHEN NOT MATCHED THEN INSERT VALUES(S.PageViewID, 1);
END
C# Kodu
private static void ExecuteProcedure(bool useDataTable, string connectionString, IEnumerable<long> ids) {
using (SqlConnection connection = new SqlConnection(connectionString)) {
connection.Open();
using (SqlCommand command = connection.CreateCommand()) {
command.CommandText = "dbo.procMergePageView";
command.CommandType = CommandType.StoredProcedure;
SqlParameter parameter;
if (useDataTable) {
parameter = command.Parameters.AddWithValue("@Display", CreateDataTable(ids));
}
else {
parameter = command.Parameters.AddWithValue("@Display", CreateSqlDataRecords(ids));
}
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.PageViewTableType";
command.ExecuteNonQuery();
}
}
}
private static DataTable CreateDataTable(IEnumerable<long> ids) {
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(long));
foreach (long id in ids) {
table.Rows.Add(id);
}
return table;
}
private static IEnumerable<SqlDataRecord> CreateSqlDataRecords(IEnumerable<long> ids) {
SqlMetaData[] metaData = new SqlMetaData[1];
metaData[0] = new SqlMetaData("ID", SqlDbType.BigInt);
SqlDataRecord record = new SqlDataRecord(metaData);
foreach (long id in ids) {
record.SetInt64(0, id);
yield return record;
}
}
Nasıl bir toplu iş dosyası komut satır...
Nasıl İplik yöntemi ThreadStart parame...
Nasıl DbContext kullanmak için.Veritab...
Nasıl DbContext parametreleri geçirmek...
Nasıl saklı satır içeren varolan bir S...