我有一个DataTable
从SQL查询填充到本地数据库,但我不知道如何从中提取数据.主要方法(在测试程序中):
static void Main(string[] args)
{
const string connectionString = "server=localhost\\SQLExpress;database=master;integrated Security=SSPI;";
DataTable table = new DataTable("allPrograms");
using (var conn = new SqlConnection(connectionString))
{
Console.WriteLine("connection created successfuly");
string command = "SELECT * FROM Programs";
using (var cmd = new SqlCommand(command, conn))
{
Console.WriteLine("command created successfuly");
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
conn.Open();
Console.WriteLine("connection opened successfuly");
adapt.Fill(table);
conn.Close();
Console.WriteLine("connection closed successfuly");
}
}
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
我用来在我的数据库中创建表的命令:
create table programs
(
progid int primary key identity(1,1),
name nvarchar(255),
description nvarchar(500),
iconFile nvarchar(255),
installScript nvarchar(255)
)
Run Code Online (Sandbox Code Playgroud)
如何从DataTable
一个有意义的表单中提取数据?
mar*_*c_s 144
DataTable有一组.Rows
DataRow元素.
每个DataRow对应于数据库中的一行,并包含一组列.
要访问单个值,请执行以下操作:
foreach(DataRow row in YourDataTable.Rows)
{
string name = row["name"].ToString();
string description = row["description"].ToString();
string icoFileName = row["iconFile"].ToString();
string installScript = row["installScript"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
渣
rah*_*hul 21
您可以将数据表设置为许多元素的数据源.
例如
网格视图
中继器
数据列表
等等
如果您需要从每行提取数据,那么您可以使用
table.rows[rowindex][columnindex]
Run Code Online (Sandbox Code Playgroud)
要么
如果您知道列名称
table.rows[rowindex][columnname]
Run Code Online (Sandbox Code Playgroud)
如果你需要迭代表,那么你可以使用for循环或foreach循环
for ( int i = 0; i < table.rows.length; i ++ )
{
string name = table.rows[i]["columnname"].ToString();
}
foreach ( DataRow dr in table.Rows )
{
string name = dr["columnname"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
hal*_*ldo 11
DataTable
当您有多种数据类型(不仅仅是字符串)时,从 a 中提取数据的最简单方法是使用Field<T>
程序集中可用的扩展方法System.Data.DataSetExtensions
。
var id = row.Field<int>("ID"); // extract and parse int
var name = row.Field<string>("Name"); // extract string
Run Code Online (Sandbox Code Playgroud)
从MSDN,Field<T>
方法:
提供对 DataRow 中每个列值的强类型访问。
这意味着当您指定类型时,它将验证并取消装箱对象。
例如:
// iterate over the rows of the datatable
foreach (var row in table.AsEnumerable()) // AsEnumerable() returns IEnumerable<DataRow>
{
var id = row.Field<int>("ID"); // int
var name = row.Field<string>("Name"); // string
var orderValue = row.Field<decimal>("OrderValue"); // decimal
var interestRate = row.Field<double>("InterestRate"); // double
var isActive = row.Field<bool>("Active"); // bool
var orderDate = row.Field<DateTime>("OrderDate"); // DateTime
}
Run Code Online (Sandbox Code Playgroud)
它还支持可为空类型:
DateTime? date = row.Field<DateTime?>("DateColumn");
Run Code Online (Sandbox Code Playgroud)
这可以简化从中提取数据的过程,DataTable
因为它消除了将对象显式转换或解析为正确类型的需要。
请考虑使用一些这样的代码:
SqlDataReader reader = command.ExecuteReader();
int numRows = 0;
DataTable dt = new DataTable();
dt.Load(reader);
numRows = dt.Rows.Count;
string attended_type = "";
for (int index = 0; index < numRows; index++)
{
attended_type = dt.Rows[indice2]["columnname"].ToString();
}
reader.Close();
Run Code Online (Sandbox Code Playgroud)