У меня есть простая форма, которая заполняет сетку данных из SQL-запроса, как показано ниже:
private void btnGo_Click(object sender, EventArgs e)
{
var select = "SELECT top(10) CAST(CAST(substring([nSrcIPAddress], 1, 1) AS int) AS nvarchar(3)) + '.' + CAST(CAST(substring([nSrcIPAddress], 2, 1) AS int) AS nvarchar(3)) +'.' + CAST(CAST(substring([nSrcIPAddress], 3, 1) AS int) AS nvarchar(3)) +'.' + CAST(CAST(substring([nSrcIPAddress], 4, 1) AS int) AS nvarchar(3)) AS Source,CAST(CAST(substring([nDstIPAddress], 1, 1) AS int) AS nvarchar(3)) + '.' + CAST(CAST(substring([nDstIPAddress], 2, 1) AS int) AS nvarchar(3)) +'.' + CAST(CAST(substring([nDstIPAddress], 3, 1) AS int) AS nvarchar(3)) +'.' + CAST(CAST(substring([nDstIPAddress], 4, 1) AS int) AS nvarchar(3)) AS Destination, round(sum([nBytes])/1048576.0,2) AS MB FROM Source INNER JOIN SourceInterfaceMap ON Source.nSourceID = SourceInterfaceMap.nSourceID INNER JOIN FlowRaw ON SourceInterfaceMap.nInterfaceID = FlowRaw.nInputInterfaceID where sName = '" + cmbSwitch.Text + "' and (dTime > DATEADD(minute, -" + cmbPeriod.Text + ", getdate())) group by nSrcIPAddress,nDstIPAddress order by sum(nBytes) desc";
var c = new SqlConnection(@"Data Source=SQL; Database=Net; Integrated Security=SSPI");
var dataAdapter = new SqlDataAdapter(select, c);
var commandBuilder = new SqlCommandBuilder(dataAdapter);
var ds = new DataSet();
dataAdapter.Fill(ds);
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
foreach (object item in row.ItemArray)
{
//dns here
try
{
Console.WriteLine(Dns.GetHostEntry(item.ToString()).HostName);
}
catch
{
Console.WriteLine(item);
}
}
}
dgvResults.ReadOnly = true;
dgvResults.DataSource = ds.Tables[0];
}
}
datagridview после заполнения выглядит так:
Source Destination MB
40.102.130.1 10.10.1.1 112.2
10.70.1.22 10.3.3.2 58.8
что я пытаюсь сделать, это либо просмотреть ip и вернуть имя хоста, прежде чем я заполню сетку данных, или переберу столбцы 1 и 2 сетки данных и прочитаем значение и заменим имя dns, если оно доступно?