Tôi đang cố đọc các thuộc tính mở rộng trên các bảng và cột trong ứng dụng C # winforms. Tôi đang sử dụng SQL Server SMO để làm như vậy. Khi tôi thực thi ứng dụng, nó không thấy các thuộc tính mở rộng, nhưng khi tôi đọc các thuộc tính mở rộng bằng PowerShell, nó sẽ thấy các thuộc tính mở rộng.
Mã C #:
var x = col.ExtendedProperties.Count;
var NPI = col.ExtendedProperties["NPI"].Value;
bool npi = bool.Parse(NPI.ToString());
Mã PowerShell:
Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
$server = New-Object Microsoft.SqlServer.Management.Smo.Server $env:COMPUTERNAME
$server.Databases["<db name>"].Tables["<table name>"].Columns["<column name>"].ExtendedProperties | Select Name, Value, State
Tôi đã kiểm tra và cả Visual Studio và PowerShell đều đang sử dụng cùng một phiên bản SMO (11.0.0.0). Khi tôi thực thi mã C #, col.ExtendsProperIES.Count = 0, nhưng khi tôi thực thi mã PowerShell, tôi nhận được:
Name Value State
---- ----- -----
NPI False Existing
Có ai có bất kỳ ý tưởng về lý do tại sao điều này có thể xảy ra?
thông tin thêm
Trong mã C #, tôi mở DataReader trên bảng bằng cách sử dụng:
sourceServer.ConnectionContext.ExecuteReader(<select command>)
để lấy dữ liệu từ bảng. Sau đó tôi đi vào một vòng lặp while với DataReader và bên trong vòng lặp while đó tôi có:
foreach (Column col in sourceTable.Columns)
{
StringBuilder cleanData = CleanseColumn(col, dr[col.Name].ToString());
sbvalues.Append("'" + cleanData + "', ");
}
Khi tôi bước qua foreach
, sourceTable
biến có thuộc tính mở rộng của nó, nhưng col
biến cột thì không.