2013-03-15 56 views
0

我想更新/插入数据的数量庞大到数据库的SqlDataAdapter和事务日志数据库已满

我用下面的代码:

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 [email protected] 

    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: The transaction log for database 'dbName' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

我知道这个问题已经被问了很多时间,但是我搜索,以找出是否我更新的方式/插入导致了问题。

因为我不是一个DBA,我有数据库服务器上没有权利,我不能修改备份日志,但是我真的不关心,如果问题仅仅是。然后这是由dba来解决的。

我的问题是,在编码部分,我是不是做错了什么,我可以改进,不知怎的?

感谢

+0

什么是你的数据库的恢复模式?如果你有一个DBA,你应该让他看看这个。 – JodyT 2013-03-15 21:45:13

+0

恢复模式设置为FULL,但我没有改变,无论是收缩数据库中,如果唯一的解决办法是修改这一点,那么我真的不关心,因为它是由数据库管理员来管理的权利。我只关心与编码部分 – Maro 2013-03-15 21:49:03

+1

是的,这是对DBA的一个问题,他们需要运行该数据库事务日志备份来清除它。然后可以根据具体情况收缩文件或扩展磁盘。 – steoleary 2013-03-16 08:35:46

回答

2

没有,这个错误只在DBA最终可以解决的,所以没有什么可以真正做到无权利。或者磁盘所在的卷空间不足,日志文件已达到配额,或者日志文件的自动增长未正确设置。