2016-12-03 7 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)私はCの下にフォルダを作成した)system.security.accessControl

Imports System.Security.AccessControl 

2をインポート:フォルダ

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) 
にアクセス権限の付与)

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 \

4)元の場所からファイルを作り直し、新しいフォルダに入れます。

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

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

上記の手順を実行した後、展開環境でもCSVファイルを読み取ることができました。

これらの手順の利点は、特定のフォルダにアクセス許可を追加する必要がないことです。

私は別の場所に必要なCSVファイルを作成、コピー、検索するシステムを作成する必要があります。

上記のコードが不完全なので、SQLスクリプトだけでなく、これ用にシステムを作成しました。上記のコードでは、新しいフォルダと新しいCSVファイルの作成についてのみ説明します。新しいCSVファイルは、手動で権限を与えずにSQLで読み取ることができます。したがって、これを行う場合は、CSVファイルから新しいCSVファイルにデータを取得し、ストアドプロシージャを呼び出して一括挿入する方法を研究する必要があります。

P.S - 答えとしてマークするのではなく、実際の回答が許可であるためオプションとしてのみ表示します。

関連する問題