文件路径未保存在 SQL 数据库中
File path is not being saved in SQL database
我无法将文件路径保存到我的 SQL 数据库中的文档。我需要保存它,以便稍后检索文件。
基本上,该应用程序所做的就是持续监视特定文件夹的任何更改。因此,当添加文件时,它会检测到它,然后应将该文件保存在数据库中。现在我不确定这里的最佳做法是保存文件还是只保存文件路径?
这是我目前正在测试的代码:
static void Main(string[] args)
{
string path = "C:\Documents";
MonitorDirectory(path);
Console.ReadKey();
}
private static void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
string connectionString = @"Data Source=Development-PC\SQLEXPRESS;Initial
Catalog=FileDB;Integrated Security=True";
FileStream stream = new FileStream(e.Name, FileMode.Open, FileAccess.ReadWrite);
BinaryReader reader = new BinaryReader(stream);
byte[] file = reader.ReadBytes((int)stream.Length);
reader.Close();
stream.Close();
DateTime dateTimeVariable = DateTime.Now;
SqlCommand command;
SqlConnection connection = new SqlConnection(connectionString);
command = new SqlCommand("INSERT INTO FileTable (filename, datestamp) VALUES (@filename,
@datestamp)", connection);
command.Parameters.Add("@filename", SqlDbType.Binary, file.Length).Value = file;
command.Parameters.Add("@datestamp", SqlDbType.DateTime, file.Length).Value =
dateTimeVariable;
connection.Open();
command.ExecuteNonQuery();
}
我得到的错误是在第 42 行:
command.Parameters.Add("@filename", SqlDbType.Binary, file.Length).Value = file;
即:
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
任何帮助将不胜感激!
谢谢
@GSerg 是正确的,你的代码有很多问题。如果您只需要文件名,则不必读取文件。 FileInfo
可以为您提供该信息。如果您需要读取内容并保存它,您将需要在数据库中有一个文件内容字段。
static void Main(string[] args)
{
string path = @"C:\Documents";
MonitorDirectory(path);
Console.ReadKey();
}
private static void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
string connectionString = @"Data Source=Development-PC\SQLEXPRESS;Initial Catalog=FileDB;Integrated Security=True";
FileInfo info = new FileInfo(e.FullPath);
byte[] file;
using (var fileStream = File.OpenRead(e.FullPath))
{
BinaryReader reader = new BinaryReader(fileStream);
file = reader.ReadBytes((int)fileStream.Length);
}
//FileStream stream = new FileStream(e.Name, FileMode.Open, FileAccess.ReadWrite);
//BinaryReader reader = new BinaryReader(stream);
//byte[] file = reader.ReadBytes((int)stream.Length);
//reader.Close();
//stream.Close();
DateTime dateTimeVariable = DateTime.Now;
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("INSERT INTO FileTable (filename, datestamp) VALUES (@filename, @datestamp)", connection))
{
command.Parameters.Add("@filename", SqlDbType.NVarChar).Value = info.Name;
command.Parameters.Add("@filecontent", SqlDbType.Binary).Value = file;
command.Parameters.Add("@datestamp", SqlDbType.DateTime).Value = dateTimeVariable;
connection.Open();
command.ExecuteNonQuery();
}
}
我无法将文件路径保存到我的 SQL 数据库中的文档。我需要保存它,以便稍后检索文件。
基本上,该应用程序所做的就是持续监视特定文件夹的任何更改。因此,当添加文件时,它会检测到它,然后应将该文件保存在数据库中。现在我不确定这里的最佳做法是保存文件还是只保存文件路径?
这是我目前正在测试的代码:
static void Main(string[] args)
{
string path = "C:\Documents";
MonitorDirectory(path);
Console.ReadKey();
}
private static void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
fileSystemWatcher.Deleted += FileSystemWatcher_Deleted;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
string connectionString = @"Data Source=Development-PC\SQLEXPRESS;Initial
Catalog=FileDB;Integrated Security=True";
FileStream stream = new FileStream(e.Name, FileMode.Open, FileAccess.ReadWrite);
BinaryReader reader = new BinaryReader(stream);
byte[] file = reader.ReadBytes((int)stream.Length);
reader.Close();
stream.Close();
DateTime dateTimeVariable = DateTime.Now;
SqlCommand command;
SqlConnection connection = new SqlConnection(connectionString);
command = new SqlCommand("INSERT INTO FileTable (filename, datestamp) VALUES (@filename,
@datestamp)", connection);
command.Parameters.Add("@filename", SqlDbType.Binary, file.Length).Value = file;
command.Parameters.Add("@datestamp", SqlDbType.DateTime, file.Length).Value =
dateTimeVariable;
connection.Open();
command.ExecuteNonQuery();
}
我得到的错误是在第 42 行:
command.Parameters.Add("@filename", SqlDbType.Binary, file.Length).Value = file;
即:
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
任何帮助将不胜感激!
谢谢
@GSerg 是正确的,你的代码有很多问题。如果您只需要文件名,则不必读取文件。 FileInfo
可以为您提供该信息。如果您需要读取内容并保存它,您将需要在数据库中有一个文件内容字段。
static void Main(string[] args)
{
string path = @"C:\Documents";
MonitorDirectory(path);
Console.ReadKey();
}
private static void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.EnableRaisingEvents = true;
}
private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
string connectionString = @"Data Source=Development-PC\SQLEXPRESS;Initial Catalog=FileDB;Integrated Security=True";
FileInfo info = new FileInfo(e.FullPath);
byte[] file;
using (var fileStream = File.OpenRead(e.FullPath))
{
BinaryReader reader = new BinaryReader(fileStream);
file = reader.ReadBytes((int)fileStream.Length);
}
//FileStream stream = new FileStream(e.Name, FileMode.Open, FileAccess.ReadWrite);
//BinaryReader reader = new BinaryReader(stream);
//byte[] file = reader.ReadBytes((int)stream.Length);
//reader.Close();
//stream.Close();
DateTime dateTimeVariable = DateTime.Now;
using (var connection = new SqlConnection(connectionString))
{
using (var command = new SqlCommand("INSERT INTO FileTable (filename, datestamp) VALUES (@filename, @datestamp)", connection))
{
command.Parameters.Add("@filename", SqlDbType.NVarChar).Value = info.Name;
command.Parameters.Add("@filecontent", SqlDbType.Binary).Value = file;
command.Parameters.Add("@datestamp", SqlDbType.DateTime).Value = dateTimeVariable;
connection.Open();
command.ExecuteNonQuery();
}
}