【发布时间】:2013-03-04 18:24:29
【问题描述】:
我正在尝试将大量数据更新/插入到数据库中
我正在使用以下代码:
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedureName;
command.UpdatedRowSource = UpdateRowSource.None;
foreach (SqlParameter sqlParameter in sqlParameters)
command.Parameters.Add(sqlParameter);
var adapter = new SqlDataAdapter();
adapter.InsertCommand = command;
adapter.UpdateBatchSize = batchSize;
return adapter.Update(table);
}
我正在使用以下存储过程:
@shareAdGroupId int,
@groupPermissionName varchar(100)
AS
BEGIN transaction
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.@permissionTypeName
declare @permissionId int
EXEC [dbo].[PROC_UPSERT_PERMISSION] @permissionName = @groupPermissionName, @permissionId = @permissionId OUTPUT
SET NOCOUNT ON;
BEGIN TRY
begin
INSERT INTO [dbo].SHARE_AD_GROUP_PERMISSION
(SHARE_AD_GROUP_ID,PERMISSION_ID)
VALUES
(@shareAdGroupId,@permissionId)
end
END TRY
BEGIN CATCH
--RETURN ERROR_MESSAGE()
END CATCH
commit transaction
插入/更新随机数记录后,出现错误:
System.Data.SqlClient.SqlException:数据库“dbName”的事务日志已满。要找出日志中的空间不能被重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列
我知道这个问题已经被问过很多次了,但是我搜索了我更新/插入的方式是否导致了这个问题。
由于我不是 DBA,并且我对 db 服务器没有任何权限,因此我无法修改备份日志,但我并不关心问题是否仅此而已。那么这个就交给dba来解决了。
我的问题是,在编码部分,我做错了什么,我可以改进吗?
谢谢
【问题讨论】:
-
您的数据库的恢复模式是什么?如果你有 DBA,你应该让他调查一下。
-
恢复模型设置为 FULL,但我无权更改它也没有缩小数据库,如果唯一的解决方案是修改它,那么我真的不在乎,因为它是由dba来管理。我只关心编码部分
-
是的,这是 DBA 的问题,他们需要在这个 DB 上运行事务日志备份来清除它。然后可以根据情况缩小文件或扩展磁盘。
标签: c# sql-server sql-server-2008-r2