我是为我的学者做这个项目的新手。我有一个标识列slno
。
我需要从上一行中选择EmpID
并将其递增1并将其添加到具有以下内容的新行。但我不知道如何实现这一目标。
P.S:我评论了EmpID字符串格式。
protected void Button1_Click(object sender, EventArgs e)
{
using(SqlCommand cmd = new SqlCommand("Insert into Emplo ([Name],[Password],[Designation],[Dept],[D O B],[Sex],[Address]) values (@Name,@pass,@des,@dept,@DOB,@Sex,@Address)", con))
{
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox1.Text;
cmd.Parameters.Add("@des", SqlDbType.VarChar).Value = TextBox2.Text;
cmd.Parameters.Add("@dept", SqlDbType.VarChar).Value = TextBox3.Text;
cmd.Parameters.Add("@DOB", SqlDbType.SmallDateTime).Value = TextBox4.Text;
cmd.Parameters.Add("@Sex", SqlDbType.VarChar).Value = RadioButton1.SelectedItem.Text;
cmd.Parameters.Add("@Address", SqlDbType.VarChar).Value = TextBox5.Text;
cmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = CreateRandomPassword(6);
con.Open();
cmd.ExecuteNonQuery();
Response.Write("<script>alert('Registered successfully......!')</script>");
}
//String result = String.Format("a{0:0000}", i);
//Response.Write("<script>alert('Your Employee ID is " + Server.HtmlEncode(result.ToString()) + "')</script>");
con.Close();
}
答案 0 :(得分:1)
这与c#无关,至少根据你的代码也没有与MySql有任何关系,你使用的是SQL Server而不是MySql。 您可以将EmpId设置为标识列。
在我们在评论中的谈话之后,我回到了SQL Fiddle并玩了大约3分钟,想出了这个:
创建表格:
CREATE TABLE T (
EmpId int IDENTITY(1,1),
EmpName char(3)
)
插入样本数据
INSERT INTO T(EmpName) VALUES ('abc'), ('def'), ('ghi')
选择中的格式化EmpId:
SELECT EmpId,
EmpName,
RIGHT(REPLICATE('0', 5) + CAST(EmpId as varchar(5)), 5) As FormattedEmpId
FROM T;
在Where:
中使用Formatted EmpIdDECLARE @EmpId nvarchar(5)
SET @EmpId = '00002'
SELECT EmpId, EmpName
FROM T
WHERE EmpId = CAST(@EmpId as int)
正如您所看到的,EmpId存储为int标识列,您可以在select子句中使用纯t-sql对其进行操作,使其看起来像前导零,并使用where子句来转换字符串使用前导零到简单的int值。
我建议在你正在编写的c#软件中格式化EmpId,因为显示问题不是数据库的工作,但正如你所看到的那样绝对可能。
答案 1 :(得分:0)
这就是我用的!我不知道sql存储过程,所以我无法判断@zohar peled给出的答案是否正确。
下面是我用来获取前一行值(字母数字)并将其递增1的代码
using (SqlCommand cnd = new SqlCommand("SELECT TOP 1 EmpId FROM Emplo ORDER BY EmpId DESC", con))
{
string x =Convert.ToString(cnd.ExecuteScalar());
string justNumbers = new String(x.Where(Char.IsDigit).ToArray());
int numbers = Convert.ToInt32(justNumbers);
numbers = numbers + 1;
resul = string.Format("a{0:0000}", numbers);
Response.Write("<script>alert('Your Employee ID is " + Server.HtmlEncode(resul) + "')</script>");//to display generated EmpID
}
结果是全局声明的,以便我可以在插入语句中使用它
在&#39; a&#39;