0

を含むSQLデータベースを作成しようとしています

Image Id (int)
Imagename (varchar(50))
Image (image)

そしてaspxでアップロードボタンにこのコードを書いてください:

protected void btnUpload_Click(object sender, EventArgs e)
{
    //Condition to check if the file uploaded or not
    if (fileuploadImage.HasFile)
    {
        //getting length of uploaded file
        int length = fileuploadImage.PostedFile.ContentLength;

        //create a byte array to store the binary image data
        byte[] imgbyte = new byte[length];

        //store the currently selected file in memeory
        HttpPostedFile img = fileuploadImage.PostedFile;

        //set the binary data
        img.InputStream.Read(imgbyte, 0, length);

        string imagename = txtImageName.Text;

        //use the web.config to store the connection string
        SqlConnection connection = new SqlConnection(strcon);
        connection.Open();

        SqlCommand cmd = new SqlCommand("INSERT INTO Image (ImageName,Image) VALUES (@imagename,@imagedata)", connection);
       cmd.Parameters.Add("@imagename", SqlDbType.VarChar, 50).Value = imagename;
       cmd.Parameters.Add("@imagedata", SqlDbType.Image).Value = imgbyte;

       int count = cmd.ExecuteNonQuery();
       connection.Close();

       if (count == 1)
       {
           BindGridData();
           txtImageName.Text = string.Empty;
           ScriptManager.RegisterStartupScript(this, this.GetType(), "alertmessage", "javascript:alert('" + imagename + " image inserted successfully')", true);
       }
    }
}

新しい画像をアップロードするときは、最初にこの画像がデータベースにすでに存在するかどうかを確認し、存在しない場合はデータベースに保存する必要があります。

どうすればいいですか?

4

3 に答える 3

1

ファイル名がテーブルにすでに存在するかどうかをチェックするメソッドを追加します。

    private bool FileExists(string imageName)
    {
        using (SqlConnection conn = new SqlConnection()) // establish connection
        {
            using (SqlCommand cmd =
                new SqlCommand("select 1 where exists(select Id from Image where ImageName = @)", conn))
            {
                cmd.Parameters.Add("@imagename", SqlDbType.VarChar, 50).Value = imageName;
                return cmd.ExecuteNonQuery() > 0;
            }
        }
    }

それなら私はこれをそのように呼ぶでしょう

        if (fileuploadImage.HasFile && !FileExists(txtImageName.Text))
        {
            ...
于 2012-10-02T15:35:39.743 に答える
0
 string cmd ="if not exists (select * from Image where ImageName= @imagename); ";
 \\if you want to check image data
 \\ (select * from Image where SUBSTRING(ImageName, 1, 8000)= SUBSTRING(@imagename, 1, 8000) ); 
 string cmd += "INSERT INTO Image (ImageName,Image) VALUES (@imagename,@imagedata)"; 
 SqlCommand cmd = new SqlCommand(cmd, connection);

imagedataを検証する場合DATALENGTHは、2つの画像のチェックの最初の行として使用してみてください。が異なる場合DATALENGTHは、「異なる」画像があると考えられます。最初の8000バイトをチェックするために
使用することも 、最後の8000バイトをチェックするために使用することもできます。SUBSTRING(Image, 1, 8000)
SUBSTRING(Image, DATALENGTH(Image) - 7999, 8000)

于 2012-10-02T14:47:44.700 に答える
0

最速の方法の1つは、UPDATEを実行し、updateが更新を返さない場合はINSERTを実行することです。

string cmd = @"UPDATE Image SET Image = @imagedata WHERE ImageName = @ImageName
               IF @@ROWCOUNT=0
                  INSERT INTO Image (ImageName,Image) VALUES (@imagename,@imagedata)";

または、画像自体をクエリする場合:

string cmd = @"UPDATE Image SET ImageName = @ImageName WHERE Image = @imagedata
               IF @@ROWCOUNT=0
                  INSERT INTO Image (ImageName,Image) VALUES (@imagename,@imagedata)";
于 2012-10-02T14:49:01.237 に答える