Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据库中检索文件?_C#_Sql Server_Database_Access Denied_Bytestowrite - Fatal编程技术网

C# 如何从数据库中检索文件?

C# 如何从数据库中检索文件?,c#,sql-server,database,access-denied,bytestowrite,C#,Sql Server,Database,Access Denied,Bytestowrite,我通过将文件转换为字节将其保存在数据库中。它已成功保存,但我无法检索它 以下是我用来转换和保存的代码: public static void databaseFilePut(string varFilePath) { byte[] file; using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) { using (var reader = new

我通过将文件转换为字节将其保存在数据库中。它已成功保存,但我无法检索它

以下是我用来转换和保存的代码:

public static void databaseFilePut(string varFilePath)
{
    byte[] file;

    using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read))
    {
        using (var reader = new BinaryReader(stream))
        {
            file = reader.ReadBytes((int)stream.Length);
        }
    }

    using (SqlConnection varConnection = new SqlConnection("Data Source=FARHANB;Initial Catalog=save;Integrated Security=True"))
    using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection))
    {
        varConnection.Open();
        sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;

        sqlWrite.ExecuteNonQuery();
        varConnection.Close();
    }
}
我正在使用以下代码从数据库中检索它:

public static void databaseFileRead(string varID, string varPathToNewLocation)
{
    using (SqlConnection varConnection = new SqlConnection("Data Source=FARHANB;Initial Catalog=save;Integrated Security=True"))
    using (var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection))
    {
        varConnection.Open();
        sqlQuery.Parameters.AddWithValue("@varID", varID);

        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult != null)
            {
                sqlQueryResult.Read();
                var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
                sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);

                using (var fs = new FileStream(varPathToNewLocation, FileMode.Create, FileAccess.Write))
                    fs.Write(blob, 0, blob.Length);

                varConnection.Close();
            }
        }
    }

我已经一个接一个地使用了这两个代码块,但它们都不起作用

首先,我把问题解决了

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
所以我把它改成了
sqlconnection
。它成功地保存了字节,所以我认为问题不在这里

我遇到的第二个问题是“访问被拒绝”。我遇到了拒绝访问错误,所以我通过将文件保存在bin项目中解决了这个问题

现在没有错误,但指定文件夹中也没有文件

下面是我在方法中传递的引用

databaseFileRead("1",@"\here");
我该怎么办?请告诉我,我对数据库还不熟悉


谢谢

这是路径问题。 我做错了 这是解决办法

databaseFileRead("1",@"here\filename");

但它们都不起作用。
什么具体不起作用<代码>首先,我在中遇到了问题,具体是什么问题<代码>我遇到的第二个问题是,访问被拒绝。我遇到“拒绝访问”错误,因此我通过将文件保存在bin项目中解决了该问题。哪行代码引发了该异常
现在没有错误,但指定的文件夹中也没有文件。
指定的文件夹是什么?我建议确保
varPathToNewLocation
包含完全限定的路径。@mjwills我发布了两个几乎相同的方法,我从两个不同的来源获得它们,但它们都不工作。听起来不像sql问题-纯粹是流写入器/访问/路径问题。我认为问题的标题是错误的。@mjwills谢谢你是对的,这是路径的问题。我解决了:)
databaseFileRead("1",@"here\filename");