Sau một vài hướng dẫn và tôi có thể tạo thành công một lớp sưu tập kế thừa chức năng cần thiết để tạo một DataTable có thể được chuyển đến một thủ tục lưu trữ của Sql Server như một tham số giá trị bảng. Mọi thứ dường như hoạt động tốt; Tôi có thể nhận được tất cả các hàng được thêm vào và nó trông đẹp. Tuy nhiên, khi kiểm tra kỹ hơn, tôi nhận thấy rằng khi tôi thêm một hàng mới, dữ liệu cho tất cả các hàng trước đó sẽ bị ghi đè bằng giá trị cho hàng mới. Vì vậy, nếu tôi có một hàng với một giá trị chuỗi của "foo" và tôi thêm một hàng thứ hai với giá trị "bar", hàng thứ hai sẽ được chèn (tạo một DataTable với hai hàng) nhưng cả hai hàng sẽ có giá trị "bar ". Bất cứ ai có thể thấy lý do tại sao điều này sẽ được? Dưới đây là một số mã, hoạt động nhưng đã được đơn giản hóa một chút (lớp Tag đã được giảm để dễ giải thích).Tại sao thêm một giá trị mới vào danh sách <> ghi đè các giá trị trước đó trong danh sách <>
Sau đây là lớp Collection của:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using Microsoft.SqlServer.Server;
namespace TagTableBuilder
{
public class TagCollection : List<Tag>, IEnumerable<SqlDataRecord>
{
IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator()
{
var sdr = new SqlDataRecord(
new SqlMetaData("Tag", SqlDbType.NVarChar)
);
foreach (Tag t in this)
{
sdr.SetSqlString(0, t.tagName);
yield return sdr;
}
}
}
public class Tag
{
public string tagName { get; set; }
}
}
Chúng được gọi như sau:
//Create instance of collection
TagCollection tags = new TagCollection();
//Create instance of object
Tag _tag = new Tag();
foreach (string t in tagList)
{
//Add value to class propety
_tag.tagName = t;
//Add class to collection, this is where all previously added rows are overwritten
tags.Add(_tag);
}
Đúng, tôi nên sửa lỗi đó ngay lập tức cảm ơn bạn! –