1

データベースにファイルが存在するか、asp.netを使用していないかを確認したい。それについて調べましたが、バイトファイルとの比較は見つかりませんでした。

Visual Studio 2010、SQL Server 2008、および C# 言語を使用しました。

だから、私はこのコードを書き込もうとしましたが、エラーを表示します:

「System.Byte[])」付近の構文が正しくありません。

また、この問題に関する別の解決策はありますか?

コード

if (ext == ".doc" || ext == ".docx" || ext == ".pdf" || ext == ".txt")
{
   Stream fs = FileUpload1.PostedFile.InputStream;
   BinaryReader br = new BinaryReader(fs);
   Byte[] bytes = br.ReadBytes((Int32)fs.Length);

   //insert the file into database
   strQuery = "insert into [Text File](User_id, T_Title, T_Extension, T_Data, Course_code, Course_num, T_Description, T_Keyword,Date)" +
   " values (@User_id, @T_Title, @T_Extension, @T_Data, @Course_code, @Course_num, @T_Description, @T_Keyword, @Date)";

   SqlCommand cmd = new SqlCommand(strQuery);
   cmd.Parameters.Add("@User_id", (string)Session["ID"]);
   cmd.Parameters.Add("@T_Title", SqlDbType.VarChar).Value = filename;
   cmd.Parameters.Add("@T_Extension", SqlDbType.VarChar).Value = ext;
   cmd.Parameters.Add("@T_Data", SqlDbType.VarBinary).Value = bytes;

   strQueryCount = "select count(*) from [Text File] where T_Data.SequenceEqual ('" + bytes + ")'";

   cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = DateTime.Now;
   cmd.Parameters.Add("@Course_code", Course_code.SelectedItem.Text);
   cmd.Parameters.Add("@Course_num", Course_num.SelectedItem.Text);
   cmd.Parameters.Add("@T_Description", Description.Text);
   cmd.Parameters.Add("@T_Keyword", keywords.Text);

   InsertUpdateData(cmd, bytes, strQueryCount);
}

private Boolean InsertUpdateData(SqlCommand cmd, Byte[] bytes, string strQueryCount)
{
    String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection con = new SqlConnection(strConnString);
    cmd.CommandType = CommandType.Text;
    cmd.Connection = con;

    try
    {
        con.Open();
        command = new SqlCommand(strQueryCount, con);

        int num = Convert.ToInt16(command.ExecuteScalar());
        Label2.Text = num.ToString();

        if (num == 0)
        {
            cmd.ExecuteNonQuery();
            return true;
        }
        else
        {
            Label2.ForeColor = System.Drawing.Color.Red;
            Label2.Text = "error ";
            Description.Text = " ";
            keywords.Text = " ";
            Course_code.SelectedItem.Text = " ";
            Course_num.SelectedItem.Text = " ";
            return false;
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
        return false;
    }
    finally
    {
        con.Close();
        con.Dispose();
    }
}

ありがとう..

4

2 に答える 2

3

byte stream他のデータ型のようにファイルを比較することはできません。hashまたはのようなファイルに対していくつかの一意の値を生成し、ファイルが存在するかどうかを確認するために使用できるcheck-sumバイト ストリームと共に に保存できます。DB通常、これらのメカニズムはこれには使用されません。これは、ファイルの内容がまったく同じ場合にのみ機能します。わずかな違いでも一致を識別できません。

または、通常のように別の情報を保存することもできます。ファイル名またはユーザーベースの検証と同様に、ファイルが存在するかどうかを確認します。

編集:

次のようなハッシュを見つけることができます

string hash;
using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
    hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}

ここでそれを見る

于 2013-07-23T10:46:41.850 に答える