Microsoft OLE DB Provider for SQL Server 错误 '80040e14'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Microsoft OLE DB Provider for SQL Server 错误 '80040e14'相关的知识,希望对你有一定的参考价值。

方法1:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--no_log和truncate_only是在这里是同义的,随便执行哪一句都可以
第二步:
1.收缩特定数据库的所有数据和日志文件,执行
dbcc
shrinkdatabase
(database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc
shrinkfile(file_id,[,target_size])
--file_id是要收缩的文件的标识
(ID)
号,若要获得文件
ID,请使用
FILE_ID
函数或在当前数据库中搜索
sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc
shrinkfile
将文件大小减少到默认文件大小
两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。
方法2
(这个方法在sqlserver2000的环境下做一般能成功,在sqlserver7及以下版本就不一定了):
第一步:
先备份整个数据库以备不测
第二步:
备份结束后,在Query
Analyzer中执行如下的语句:
exec
sp_detach_db
yourDBName,true
--卸除这个DB在MSSQL中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在Query
Analyzer中执行如下的语句:
exec
sp_attach_single_file_db
yourDBName,'d:\mssql7\data\yourDBName_data.mdf'
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。
以上方法在清除log日志中均有效。
但,能否让sql
server
不产生log日志呢?以上方法好像均无效。
我这儿正好有个case:
我客户的sql
server每天都会产生4,500M的log日志,每天都清除一下,非常不便。有没有办法实现不产生log日志呢?
我分析了一下客户产生log日志的原因,并且做了相应测试。
客户是每天将数据库清空,从总系统中将数据导入到sql
server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。
比如:
SELECT
*
into
test_2
from
b_bgxx
共45000条记录,产生十几M
log,如果
delete
from
test_2
产生80多M
log
,这明显存在问题。
虽然可以换成:
truncate
table
test_2
但我还是希望能找到不产生log的方法。就如oracle不产生归档一样
参考技术A 那你前30行代码贴出来
你用的是什么数据库?
什么版本?
如果是
access数据库
,那DbType就应该在最开始赋值成1,不是在代码里,就是在
配置文件
里,你找一下,改成1就行了,如果实在找不到,那就只能在If
DbType=1
Then上面加上一句
DbType=1

你的错误,明显是走到了
sql数据库
上了

ATL OLE DB 使用者模板与 Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) 不兼容?

【中文标题】ATL OLE DB 使用者模板与 Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) 不兼容?【英文标题】:ATL OLE DB Consumer Templates incompatible with Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)? 【发布时间】:2020-02-15 12:14:13 【问题描述】:

我的应用程序使用 ATL OLE DB 消费者模板,但我希望将 OLE DB 驱动程序升级到“Microsoft OLE DB Driver for SQL Server”(版本 18.2 或 18.3),并且我已经下载了驱动程序,安装了它,更改了提供程序我在应用程序中到“Provider=MSOLEDBSQL”的连接字符串,运行应用程序只是为了在 atldbsch.h 文件的调试器中看到,因为代码在逐行执行时到达那里,它链接到 oledb32.dll 和 sqloledb .dll 而不是安装在 System32 目录中的新 msoledbsql.dll。

我无法让它使用新的 OLE DB 驱动程序;我需要做什么才能使其链接到新的 DLL?是应用程序使用 ATL OLE DB 消费者模板这一事实决定了这一点吗?

我正在尝试连接到我想使用 DATETIME2 数据类型的 SQL Server 2012 数据库,但在我的 C++ 代码中,我得到了一个数据类型 130,它映射到 WSTR - varchar(27) 而不是 DB_DATETIME (数据类型 135)。如果代码成功使用 18.2 或 18.3 版本的“Microsoft OLE DB Driver for SQL”,则不会发生这种情况。

【问题讨论】:

【参考方案1】:

好吧,我可能自己解决了这个问题,但我尝试了很多东西试图让它工作,所以我不完全确定我做了什么。但是,我怀疑我将“msoledbsql.h”的包含尽可能移到 stdafx.h 文件中,以便在任何其他包含文件包含任何其他旧 oledb 文件的情况下尽可能晚地包含它.

不知道这是否对任何人有帮助,但它似乎对我有用。

【讨论】:

以上是关于Microsoft OLE DB Provider for SQL Server 错误 '80040e14'的主要内容,如果未能解决你的问题,请参考以下文章