我有一个ASP.NET(4.5)网站。
下面的这个按钮命令将employeename,employeelastname,employeephoto插入到图像文件夹和imagepath到db。
我希望imagepath自动为uniquename + extension;
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";
}
}
}
答案 0 :(得分:2)
如果您需要的只是文件名是唯一的,并且您不一定关心他们的名字,一个简单的解决方案是使用guid作为文件名:
string filepath = Guid.NewGuid().ToString() + ext;
将员工姓名添加到文件名可能也是一个好主意,这样只需查看其名称就可以更轻松地识别文件:
string filepath = string.Format("{0}-{1}-{2}{3}",
TextBox1.Text,
TextBox2.Text,
Guid.NewGuid().ToString(),
ext);
答案 1 :(得分:1)
如果您不想执行INSERT
和SCOPE_IDENTITY
路线,则另一个选项是使用GUID。
尝试构建自己的唯一ID(比如通过组合名称+时间或其他任何你能想到的东西)更有可能产生副本而不是GUID。
string filepath = Guid.NewGuid().ToString() + ext;
答案 2 :(得分: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));
....
目前无法测试所有内容,但我认为这个想法很明确。