有没有办法检查数据库中是否存在来自文本文件的数据?

时间:2019-07-12 06:55:10

标签: c# asp.net

使用流读取器读取文本文件(.txt)数据,然后将其保存到数据库中。当用户试图读取/保存相同的文本文件时,是否有办法检查数据库中是否存在相同的数据?

这是浏览和打开文本文件的代码:

OpenFileDialog openFileDialog1 = new OpenFileDialog
{
    InitialDirectory = @"C:\",
    Title = "Browse Text Files",

    CheckFileExists = true,
    CheckPathExists = true,

    DefaultExt = "txt",
    Filter = "txt files (*.txt)|*.txt",
    FilterIndex = 2,
    RestoreDirectory = true,

    ReadOnlyChecked = true,
    ShowReadOnly = true
};

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    textBox1.Text = openFileDialog1.FileName;
}

这是用于将数据读取并保存到数据库中的代码:

if (textBox1.Text != "")
{
    List<string> names = new List<string>();
    string message = "Data Submitted Successfully";

    string line;
    using (SqlConnection con = new SqlConnection("Data Source=THABO\\SQLEXPRESS;Initial Catalog=Airtime;Integrated Security=True"))
    {
        con.Open();
        using (StreamReader file = new StreamReader(@textBox1.Text))
        {
            while ((line = file.ReadLine()) != null)
            {
                string[] fields = line.Split('|');

                SqlCommand cmd = new SqlCommand("INSERT INTO Voucher(Currency,Nomination) VALUES (@Currency,@nomination,)", con);
                cmd.Parameters.AddWithValue("@currency", fields[0].ToString());
                cmd.Parameters.AddWithValue("@nomination", fields[1].ToString());
                cmd.ExecuteNonQuery();
            }
        }
        con.Close();

    }
}

代码工作正常,我想验证(因此用户无法将相同数据从文本文件保存/读取到数据库)

1 个答案:

答案 0 :(得分:0)

如果要查找,如果它是完全相同的文本文件,则应在数据库中保存其他元信息,因为进行精确比较(取决于文件的大小)非常昂贵。根据您的方案,您可以将文件名,大小,创建日期和/或文件的哈希(例如SHA-256)保存为其他元数据。获取新文件时,您需要从数据库中文件大小相同的所有文件中请求元数据。然后,您可以进行其他检查,例如名称,创建日期或计算新文件的哈希值,并将其与已经获得的哈希值进行比较。如果至少哈希匹配,则它是同一文件。