我编写了一个方法,该方法将表从Server复制到.NET-DataTable:
public static DataTable SQLtoDataTable(string _connectionString, string _tableName)
{
DataTable dt = new DataTable();
string queryString = "SELECT * FROM " + _tableName;
using (SqlConnection connection = new SqlConnection(_connectionString))
{
using (SqlCommand queryCMD = new SqlCommand(queryString))
{
using (SqlDataAdapter da = new SqlDataAdapter(queryCMD))
{
queryCMD.Connection = connection;
connection.Open();
da.Fill(dt);
connection.Close();
}
}
}
return dt;
}不幸的是,这种方法似乎不能100%正确地工作。虽然列和行数据是1:1传输的,但是似乎每个列的AllowDBNULL值都被设置为true,不管它是设置为数据库中的true还是false。我是遗漏了什么,还是有更好的方法将此类信息插入到DataTable中?
发布于 2014-07-29 09:40:06
看看如何在代码中使用SqlDataAdapter.FillSchema法。
将DataTable添加到DataSet并配置架构以匹配数据源中的架构。
作为一个例子,还可以看看DbDataAdapter.FillSchema方法(DataSet,SchemaType)
FillSchema操作将DataTable添加到目标DataSet。然后将列添加到DataTable的DataTable中,并配置以下DataColumn属性(如果它们存在于数据源中): ·AllowDBNull ·AutoIncrement。必须分别设置AutoIncrementStep和AutoIncrementSeed。 ·MaxLength ·ReadOnly ·独特 FillSchema还根据以下规则配置PrimaryKey和约束属性: ·如果SelectCommand返回一个或多个主键列,则它们被用作DataTable的主键列。 ·如果不返回主键列,但唯一列是,则使用唯一列作为主键当且仅当所有唯一列都是不可空的。如果任何列都为空,则将UniqueConstraint添加到ConstraintCollection中,但未设置PrimaryKey属性。 ·如果返回主键列和唯一列,则主键列用作DataTable的主键列。
使用的例子
DataSet dataSet = new DataSet(dataSetName);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);
DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
mapping.ColumnMappings.Add("CompanyName", "Name");
mapping.ColumnMappings.Add("ContactName", "Contact");
connection.Open();
adapter.FillSchema(dataSet, SchemaType.Mapped);
adapter.Fill(dataSet);
return dataSet;
}https://stackoverflow.com/questions/25012164
复制相似问题