我想寻求您的帮助。
我创建了一个程序,该程序将从CSV文件中检索数据,读取选定的行,然后与选择的数据创建一个CSV文件。之后,系统将将数据从新创建的文件上传到数据库,该文件结束了事务。
问题是在执行批量插入时,数据库抛出和错误
operating system error code 5(failed to retrieve text for this error. reason: 15105)
研究后,我发现这是一个许可问题,还是?
这是我到目前为止所做的。
ALTER DATABASE training SET TRUSTWORTHY ON
我还在我的批量插入物上添加了 FIRE_TRIGGERS
请注意,我正在使用SA帐户,我想将其上传到本地数据库(部署将在我们的实时服务器上)
也不要使用我创建的存储过程从SQL插入数据。
任何建议都将受到赞赏。
预先感谢!
,因此此错误确实是@Sandeep Rawat所述的权限错误,如果可以的话,您可以使用他的答案。我想与您分享如果您想在系统中执行此操作。
首先,我想对一些缺乏点的缺乏,这可能是至关重要的,对于回答这个问题至关重要。1)我忘了提到,系统是创建并保存在我的计算机中的,该计算机具有域和管理员,我的用户帐户需要管理员访问才能更改任何内容。(因此,再次是许可错误)P>
2)当我尝试从用户帐户加载数据时,我创建的存储过程不起作用。我尝试使用以下代码使用存储过程
BULK INSERT temptable
FROM 'C:UsersMyUserDocumentsVisual Studio 2010ProjectsTestUploaderTestUploaderbinDebugMyCSV.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-我不是将此标记为答案,而只是作为选项,因为真正的答案是权限。