新创建的 CSV 文件在 BULK INSERT 期间出错

Newly created CSV file has error during 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 插入数据是有效的。

如有任何建议,我们将不胜感激。

提前致谢!

所以这个错误确实是一个权限错误,如@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)我导入了system.security.accessControl

Imports System.Security.AccessControl

2)我在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 - 我没有将此标记为答案,而只是作为一个选项,因为真正的答案是权限。