1

ASP.NET (4.5) Web サイトを持っています。

以下のこのボタン コマンドは、employeename、employeelastname、employeephoto を images フォルダに挿入し、imagepath を db に挿入します。

イメージパスが自動的に一意の名前 + 拡張子になるようにしたい。

string filepath = //"uniquename" + ext;

そのため、EmployeeID は一意であるため、混乱や重複した写真はありません。

どうすればそれを達成できますか?

ありがとうございました。

protected void Button1_Click(object sender, EventArgs e) //Insert
    {

    if (FileUploadControl.HasFile)
            {
                string ext = Path.GetExtension(FileUploadControl.FileName);

                if (ext == ".jpg" || ext == ".png" || ext == ".jpeg" || ext == ".gif")
                {
                    try
                    {
                        cnn.Open();


                        SqlCommand cmd = new SqlCommand("INSERT INTO Employees (EmployeeFirstName, EmployeeLastName, EmployeePhotoPath) VALUES (@item1,@item2,@img)", cnn);
                        cmd.Parameters.AddWithValue("@item1", TextBox1.Text);
                        cmd.Parameters.AddWithValue("@item2", TextBox2.Text);

                        string filepath = //"uniquename" + ext;
                        FileUploadControl.SaveAs(Server.MapPath("Images/") + filepath);
                        cmd.Parameters.AddWithValue("@img", filepath);

                        cmd.ExecuteNonQuery();

                        cnn.Close();
                        Label3.Text = "successfully inserted";
                    }

                    catch (Exception ex)
                    {
                        Label3.Text = ex.Message;
                    }

                    temizle();
                }

                else
                {
                    Label3.Text = "selected file is not a photo";
                }
            }
            else
            {
                Label3.Text = "please upload employee photo";
            }
        }
   }
4

3 に答える 3

2

ファイル名を一意にすることだけが必要で、必ずしもその名前を気にする必要がない場合、簡単な解決策は、ファイル名に GUID を使用することです。

string filepath = Guid.NewGuid().ToString() + ext;

従業員名をファイル名に追加することもおそらく良い考えで、名前を見るだけでファイルを簡単に識別できるようになります。

string filepath = string.Format("{0}-{1}-{2}{3}",
                                TextBox1.Text,
                                TextBox2.Text,
                                Guid.NewGuid().ToString(),
                                ext);
于 2013-10-02T21:01:26.557 に答える
1

ルートを実行したくない場合の別のオプションは、 GUID を使用INSERTすることですSCOPE_IDENTITY

独自の一意の ID を作成しようとすると (名前と時間の組み合わせなど、思いつくものを使用して)、GUID よりも重複が生成される可能性が高くなります。

string filepath = Guid.NewGuid().ToString() + ext;
于 2013-10-02T21:01:14.557 に答える
1

ファイルの名前を特定してデータベースにレコードを追加するジョブを委任するためのストアド プロシージャの作成を開始します。ストアド プロシージャは新しい ID を返し、それを外部でスカラー値としてキャッチできます。

CREATE PROCEDURE EmployeeAdd
(
   @firstN nvarchar(50),
   @lastN nvarchar(50),
   @ext nvarchar(10)
)
as
BEGIN
     DECLARE @newID int
     INSERT INTO Employees (EmployeeFirstName, EmployeeLastName, EmployeePhotoPath) 
                 VALUES (@firstN, @lastN, '')
     SET @newID = SCOPE_IDENTITY()
     DECLARE @newPath nvarchar(30)
     SET @newPath = CONVERT(nvarchar(10), @newID) + '.' + @ext
     UPDATE Employees SET EmployeePhotoPath = @newPath WHERE EmployeeID = @newID
     SELECT @newID
END

......    
SqlCommand cmd = new SqlCommand("EmployeeAdd", cnn);
cmd.Parameters.AddWithValue("@firstN", TextBox1.Text);
cmd.Parameters.AddWithValue("@lastN", TextBox2.Text);
cmd.Parameters.AddWithValue("@ext", ext);
int result = Convert.ToInt32(cmd.ExecuteScalar());
FileUploadControl.SaveAs(Server.MapPath("Images/") + string.Format("{0}.{1}", result, ext));
....

今すぐすべてをテストすることはできませんが、アイデアは明確だと思います。

于 2013-10-02T21:06:33.440 に答える