Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在表中插入imagepath_C#_Asp.net_Sql_Sql Server - Fatal编程技术网

C# 如何在表中插入imagepath

C# 如何在表中插入imagepath,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我有一个名为employee的表,其中包含以下列: empid int (autoincrement,PK), empname varchar, imagepath varchar 我想插入empid、empname和imagepath,其中image name应该是自动递增id的值,如~/images/1.jpg这里1是该行的自动递增id 这是不是完美的代码 insert into employee (name, path) values ( 'sarju', (select '~/

我有一个名为employee的表,其中包含以下列:

empid int (autoincrement,PK), 
empname varchar,
imagepath varchar
我想插入empid、empname和imagepath,其中image name应该是自动递增id的值,如~/images/1.jpg这里1是该行的自动递增id

这是不是完美的代码

insert into employee (name, path) 
values
(
 'sarju',
 (select '~/images/'+Cast(ISNULL(max(empid),0)+1 as varchar(50))+'.jpg' from emp)
)

在员工姓名中插入路径值'sarju',从emp中选择'~/images/'+CastISNULLmaxempid,0+1作为varchar50+'.jpg'


是的,这是可能的

在员工姓名中插入路径值'sarju',从emp中选择'~/images/'+CastISNULLmaxempid,0+1作为varchar50+'.jpg'


是的,这是可能的

我可能会为此而生气,因为很多人不喜欢触发器,但这是一个完美的例子,说明了触发器的用途,我真诚地希望全世界都知道:

CREATE TRIGGER update_imagepath ON dbo.employee FOR insert AS

UPDATE employee
SET imagepath = '~/images/' + CAST((SELECT empid FROM inserted) AS VARCHAR) + '.jpg'
WHERE empid = (SELECT empid FROM inserted)

它们确实是有目的的,像这样的事情正是如此。请看,您只需要插入员工的姓名,触发器就会自动运行。老实说,这是最直接的处理方法。这样做的另一个好处是,如果批量插入一组员工或从ManagementStudio运行insert语句,触发器仍然会运行!你不需要去挖掘那些疯狂的插入语句

我可能会因此而生气,因为很多人不喜欢触发器,但这是一个完美的例子,说明了触发器的用途,我真诚地希望全世界都知道:

CREATE TRIGGER update_imagepath ON dbo.employee FOR insert AS

UPDATE employee
SET imagepath = '~/images/' + CAST((SELECT empid FROM inserted) AS VARCHAR) + '.jpg'
WHERE empid = (SELECT empid FROM inserted)

它们确实是有目的的,像这样的事情正是如此。请看,您只需要插入员工的姓名,触发器就会自动运行。老实说,这是最直接的处理方法。这样做的另一个好处是,如果批量插入一组员工或从ManagementStudio运行insert语句,触发器仍然会运行!你不需要去挖掘那些疯狂的插入语句

这不是一个完美的代码,因为MAXID+1可能与下一个自动增量值不同。您可以使用IDENT_CURRENT函数

INSERT INTO employee (name,path) 
SELECT 'sarju','~/images/'+CAST(IDENT_CURRENT('employee') AS VARCHAR(50))+'.jpg'

这不是一个完美的代码,因为MAXID+1可能与下一个自动增量值不同。您可以使用IDENT_CURRENT函数

INSERT INTO employee (name,path) 
SELECT 'sarju','~/images/'+CAST(IDENT_CURRENT('employee') AS VARCHAR(50))+'.jpg'
编辑:在这项工作中,我不得不说,尼纳德·齐夫科维奇的解决方案更好

您可以使用SCOPE_IDENTITY来获取最新创建的ID。这也会更安全,这样您就不会获取错误的ID

insert into employee (name) 
values ( 'sarju')

declare @employeeId as int = SCOPE_IDENTITY()

update employee set 
path = '~/images/' + cast(@employeeId as varchar(50)) + '.jpg' 
where empid = @employeeId
编辑:在这项工作中,我不得不说,尼纳德·齐夫科维奇的解决方案更好

您可以使用SCOPE_IDENTITY来获取最新创建的ID。这也会更安全,这样您就不会获取错误的ID

insert into employee (name) 
values ( 'sarju')

declare @employeeId as int = SCOPE_IDENTITY()

update employee set 
path = '~/images/' + cast(@employeeId as varchar(50)) + '.jpg' 
where empid = @employeeId

如果只有一个特定文件夹存储图像,则只需将字段imagepath设置为计算值即可

CREATE TABLE employee 
(
    empid int IDENTITY(1,1) NOT NULL,
    empname VARCHAR(50) NOT NULL,
    imagepath AS ('~/images/'+cast(empid AS VARCHAR(50))+'.jpg')
)

INSERT INTO employee (empname) 
VALUES ('sarju')
INSERT INTO employee (empname) 
VALUES ('sarju2')

如果只有一个特定文件夹存储图像,则只需将字段imagepath设置为计算值即可

CREATE TABLE employee 
(
    empid int IDENTITY(1,1) NOT NULL,
    empname VARCHAR(50) NOT NULL,
    imagepath AS ('~/images/'+cast(empid AS VARCHAR(50))+'.jpg')
)

INSERT INTO employee (empname) 
VALUES ('sarju')
INSERT INTO employee (empname) 
VALUES ('sarju2')

你可以写一个触发器来做你想做的事。谢谢,但是你能举个例子吗?你可以写一个触发器来做你想做的事。谢谢,但是你能举个例子吗?如果在imagepath列中插入不同的当前值,那么??假设我像“~/images/”那样插入,那么什么?不,请确保我理解您的意思:您不需要插入imagepath,它将根据empid自动计算。您只需插入empname,下一个empid将自动递增,比如说10,imagepath计算为“~/images/10.jpg”是的,我理解您的意思,但如果在imagefield中插入“~/images/10.jpg”或在insert qry中仅插入“10.jpg”,则imagepath将包含“~/images/10.jpg”,并且您的insert语句将仅插入员工empname值“sarju”中,这意味着您不需要插入imagepath,也不需要担心它。如果在imagepath列中插入不同的值,那么??假设我只插入“~/images/”这样的值,那么什么?不,请确保我理解您的意思:您不需要插入imagepath,它将根据empid自动计算。您只需插入empname,下一个empid将自动递增,比如说10,imagepath计算为“~/images/10.jpg”是的,我理解您的意思,但如果在imagefield中插入“~/images/10.jpg”或在insert qry中仅插入“10.jpg”,则imagepath将包含“~/images/10.jpg”,并且您的insert语句将仅插入员工empname值“sarju”中,这意味着您不需要插入imagepath并担心它。我可以使用一个查询插入记录吗?我可以使用一个查询插入记录吗??