首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将Server表映射到DataTables?

如何正确地将Server表映射到DataTables?
EN

Stack Overflow用户
提问于 2014-07-29 09:34:23
回答 1查看 2K关注 0票数 1

我编写了一个方法,该方法将表从Server复制到.NET-DataTable:

代码语言:javascript
复制
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中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的主键列。

使用的例子

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25012164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档