2016-12-03 66 views
1

我想請求您的幫助。新建CSV文件在執行BULK INSERT時出錯

我創建了一個程序,它將從CSV文件中檢索數據,讀取選定的行,然後使用所選數據創建CSV文件。之後,系統會將新創建的文件中的數據上傳到數據庫,從而結束事務。

問題是做BULK INSERT時,數據庫將引發和錯誤

operating system error code 5(failed to retrieve text for this error. reason: 15105) 

研究後,我發現這是一個權限問題,是這樣嗎?

這是我迄今爲止所做的。

ALTER DATABASE training SET TRUSTWORTHY ON 

我也對我的BULK INSERT添加FIRE_TRIGGERS

不要拿我使用SA帳戶注意,我想將它上傳到我的本地數據庫(部署將是我們生活的服務器上)

也不要使用我創建的存儲過程插入SQL中的數據。

任何建議表示讚賞。

在此先感謝!

+0

嗨這是多大的文件..我懷疑有空間問題。 –

+0

它的938個字節的數據先生。 –

+0

嘗試給文件/文件夾下的用戶完全訪問其SQL服務正在運行... –

回答

0

所以這個錯誤確實是一個權限錯誤,正如@sandeep rawat所說的那樣,如果您願意的話,您可以使用他的答案。如果您想在系統中執行此操作,我想與您分享我所做的事情。

首先,我想道歉一些可能在回答這個問題時至關重要的缺點。 1)我忘了提及,系統創建並保存在我的電腦中,該電腦有一個域和一個管理員,我的用戶帳戶需要管理員權限才能更改任何內容(這也是一個權限錯誤)

2)我創建的存儲過程在我試圖從我的用戶賬戶中裝載數據時不起作用。我試着用下面的代碼使用存儲過程:

BULK INSERT temptable 
    FROM 'C:\Users\MyUser\Documents\Visual Studio 2010\Projects\TestUploader\TestUploader\bin\Debug\MyCSV.csv' 
    WITH 
    (
    FIELDTERMINATOR = '','', 
    ROWTERMINATOR = ''\n'', 
    MAXERRORS = 100, 
    FIRSTROW = 2 
    ) 

而且它沒有工作,它給出了在問題中陳述的錯誤。

所以這就是我所做的。

1)I進口system.security.accessControl

Imports System.Security.AccessControl 

2)I創建在C文件夾:\

Dim folderName As String 
folderName = "C:\CSVUPLOADS\" 

'check if folder exists, if not, create folder 
      If (Not System.IO.Directory.Exists(folderName)) Then 
       System.IO.Directory.CreateDirectory(folderName) 
      End If 

3)授予訪問該文件夾

Dim FolderInfo As IO.DirectoryInfo = New IO.DirectoryInfo(folderName) 
       Dim FolderAcl As New DirectorySecurity 
       FolderAcl.AddAccessRule(New FileSystemAccessRule(UserAccount, FileSystemRights.Modify, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)) 
       FolderInfo.SetAccessControl(FolderAcl) 

4)然後我從原始位置重新創建文件,並將其放入新文件夾中。

fileName = "dataUpload.csv" 
fileName = folderName & fileName 

'Create CSV file 
       File.Create(fileName).Dispose() 

完成上述創建的步驟後,即使在部署環境中,我現在也可以讀取CSV文件。

這些步驟的優點是,您不必爲某些文件夾添加權限。

缺點是,我必須創建一個系統,可以創建,複製和定位我需要到另一個位置的CSV文件。

請注意,我已經爲此創建了一個系統,而不僅僅是一個SQL腳本,所以上面的代碼是不完整的。以上代碼僅討論瞭如何創建新文件夾和新的CSV文件,該文件可以通過SQL讀取,而無需手動授予權限。因此,如果您選擇這樣做,您必須研究如何從CSV文件獲取數據到新的CSV文件,調用存儲過程,然後進行批量插入。

P.S - 我不會將此標記爲答案,而只是作爲選項,因爲真正的答案是權限。