我正在尝试使用带有"Microsoft.ACE.OLEDB.12.0"OLE DB提供程序的T-SQL OpenRowset()命令将Excel 2007(.xlsx)文件中的数据导入SQL Server 2008,并且我得到一个持久的"找不到可安装的ISAM"错误.所有硬件都是32位.
[修订于2012年1月10日,试图更加集中于异常]
以下T-SQL语句产生错误:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
如果我以"Excel 97-2003"格式(.xls)保存Excel文件并使用较旧的Microsoft.Jet.OLEDB.4.0提供程序导入数据,它可以正常工作.这让我觉得这不是安全或其他环境问题.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用Microsoft.ACE.OLEDB.12.0提供程序的*.xls文件时,它应该向后兼容*.xls格式,它再次失败并出现相同的错误:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
另外,有趣的是,当我使用SSMS"导入数据..."向导时,它工作正常.我将导入数据向导输出保存为SSIS包,并查看SSIS文件以试图弄清楚它是如何工作的,并且它已成功使用Microsoft.ACE.OLEDB.12.0提供程序.这是SSIS包中的连接字符串:
<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>
Run Code Online (Sandbox Code Playgroud)
我还完成了相关的SQL Server配置以允许OPENROWSET分布式查询:
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO
Run Code Online (Sandbox Code Playgroud)
如果我还设置了以下*sp_MSset_oledb_prop*值(我在某个帖子中找到)...
USE [master]
GO
EXEC …
Run Code Online (Sandbox Code Playgroud) 在DBeaver SQL编辑器中,有没有办法只在当前脚本窗口中搜索和替换?看起来这应该是简单明了的,但对我来说事实并非如此。
我的搜索对话框如下所示。我不知道如何将范围限制为当前窗口(假设我在不同的选项卡中打开了多个脚本)。我也不明白为什么“活动编辑器中的资源”选项被禁用。我已经在“工作集”下面进行了探索,但也不清楚如何仅指定当前窗口。
我在 Windows 10 上运行 DBeaver v.21.0.1。
DBeaver 的文件搜索文档页面没有解释这些搜索范围选项。
DBeaver 是一个很棒的工具,但有时却很迟钝!
我刚刚开始使用Entity Framework 4.1,尝试"数据库优先"模式.当EF使用"ADO.Net DbContext Generator"生成Model类时,它不应该使用[Key]属性识别类的主键吗?没有它,它似乎与T4 MVCScaffolding不兼容.
以下是详细信息:
使用实体数据模型设计器GUI,我从现有数据库向模型添加了一个简单的"国家/地区"表.GUI正确地将名为"PK"的单个整数身份密钥字段标识为我的主键.(唉!我是新用户所以我无法添加屏幕截图.我已经在下面添加了CSDL.)但是,当EF使用"ADO.Net DbContext Generator"生成代码时,它无法识别PK field作为生成的类中的关键字段(请参阅下面的代码摘录).
"国家"表的CSDL:
<edmx:ConceptualModels>
<Schema Namespace="EpiDataModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="EpiModelEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="countries" EntityType="EpiDataModel.country" />
</EntityContainer>
<EntityType Name="country">
<Key>
<PropertyRef Name="PK" />
</Key>
<Property Name="PK" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="Abbreviation" Type="String" Nullable="false" MaxLength="200" Unicode="false" FixedLength="false" />
<Property Name="Name" Type="String" MaxLength="1024" Unicode="false" FixedLength="false" />
<Property Name="Description" Type="String" MaxLength="1024" Unicode="false" FixedLength="false" />
<Property Name="Sequence" Type="Int32" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
Run Code Online (Sandbox Code Playgroud)
这是自动生成的代码:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template. …
Run Code Online (Sandbox Code Playgroud) primary-key entity-framework-4.1 ef-database-first dbcontext asp.net-mvc-scaffolding
dbcontext ×1
dbeaver ×1
editor ×1
excel-2007 ×1
isam ×1
oledb ×1
openrowset ×1
primary-key ×1
t-sql ×1