gpt4 book ai didi

c# - 从 SQL Server 调用但在 C# 中工作时,Eternal File.Exist CLR C# 不工作

转载 作者:行者123 更新时间:2023-11-30 17:49:27 25 4
gpt4 key购买 nike

我正在使用 CLR 通过 C# 方法验证文件是否存在。我在 sql server 中创建了一个程序集和函数,并且正在传递一个参数。

C#代码:

using System;
using System.IO;

public class FileExist
{
[Microsoft.SqlServer.Server.SqlFunction]
public static bool fn_FileExistCLR(string FilePath){

return System.IO.File.Exists(FilePath);
}
}

我已经在 sql server 中创建了程序集:

CREATE ASSEMBLY FileExistCLR2
FROM 'C:\MSSQLTips\FileExist2.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS

我还创建了函数:

CREATE FUNCTION [dbo].[fc_ChkFlCLR2](@filename [nvarchar](4000))
RETURNS nvarchar(4000) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [FileExistCLR2].[FileExist].[fn_FileExistCLR]
GO

函数正在将参数传递给 CLR。​​

declare @filevar as nvarchar(4000)
set @filevar = ltrim(rtrim('T:\\Project\\XML_ErrorFile20131106.txt'))
--set @filevar = ltrim(rtrim('C:\QA_Ticket.xls'))
SELECT [PlayNet].[dbo].[fc_ChkFlCLRChk] (@filevar)
GO

正在找到本地文件,但找不到网络文件夹中的文件:

结果 1 - 如果文件在网络文件夹中,函数返回 false结果 2 - 如果文件位于本地文件夹中,则函数返回 TRUE。

我在本地 sql server 中运行它们并尝试添加 @ 但无济于事。

交叉检查。我创建了一个在命令行中输出结果的 C# 方法。奇怪的是,file.exist 检测到了网络中的同一个文件。请帮忙

using System;
using System.IO;

class FileExist
{
// [Microsoft.SqlServer.Server.SqlFunction]
static void Main()
{
string FilePath = "T:\\Project\\XML_ErrorFile20131106.txt";
string retFilePath;
if (File.Exists(FilePath))
{
retFilePath = "True";
Console.WriteLine(retFilePath);
Console.ReadLine();
}
else
retFilePath = "false";
Console.WriteLine(retFilePath);
Console.ReadLine();
}
}

最佳答案

问题很可能是运行 SQL Server 进程的用户没有 T 驱动器。对于此类工作(即 \\thefileshare\project\xml...txt)使用 UNC 驱动器符号会更好(也更安全)。

关于c# - 从 SQL Server 调用但在 C# 中工作时,Eternal File.Exist CLR C# 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com