SqlDataAdapter.MissingSchemaAction
的默认值为MissingSchemaAction.Add
,但是当我指定AddWithKey
时,我无法理解它的真正含义?
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet();
da.Fill(ds, "mytable");
使用AddWithKey
时有用吗?
答案 0 :(得分:3)
Documentation here说,它“添加了必要的列和主键信息来完成架构”
它将AddWithKey
的主要功能说明为:“这可确保更新与现有记录匹配的传入记录而不是附加。”
一点反向工程揭示了以下内容:
当您调用DbDataAdapter.Fill(DataSet, string)
时,它会执行DbCommand.ExecuteReader
并将CommandBehavior
设置为SequentialAccess
如果您指定MissingSchemaAction = MissingSchemaAction.AddWithKey;
,则CommandBehavior.KeyInfo
会添加到行为中。
这会导致内部调用的DbCommand.ExecuteReader
在您的查询之上添加以下内容:
SET NO_BROWSETABLE ON;
Microsoft的documented here(如下所示)
使用浏览模式可以扫描SQL Server表中的行 一次更新表格中的数据。访问SQL 应用程序中的服务器表在浏览模式下,必须使用一个 以下两个选项:
用于从SQL访问数据的SELECT语句 服务器表必须以关键字FOR BROWSE结尾。当你打开 FOR BROWSE选项使用浏览模式,临时表是 创建
您必须运行以下Transact-SQL语句才能打开 使用NO_BROWSETABLE选项浏览模式:
SET NO_BROWSETABLE ON
当您打开NO_BROWSETABLE选项时,所有SELECT语句 表现就像FOR BROWSE选项附加到语句一样。 但是,NO_BROWSETABLE选项不会创建临时 FOR BROWSE选项通常用于发送结果的表 到你的申请。