C# 关于自动id的生成
我想在文本框中生成一个自动ID SQL中的表如下所示C# 关于自动id的生成,c#,sql,C#,Sql,我想在文本框中生成一个自动ID SQL中的表如下所示 Create table employee(empid varchar(50),empname varchar(50),sal int) ID的格式必须是TOO0、T001、TOO2`,等等 识别“自然”键中的组件 您的键具有递增数值的字符串前缀 查找具有相同前缀的所有现有值的最大数值 这是一个棘手且有争议的问题,您需要查询数据库中的所有现有密钥以。。。类似的东西可以在SQL环境中工作 理想情况下,您应该在存储过程或insert语
Create table employee(empid varchar(50),empname varchar(50),sal int)
ID的格式必须是TOO0
、T001
、TOO2`,等等
- 您的键具有递增数值的字符串前缀
- 这是一个棘手且有争议的问题,您需要查询数据库中的所有现有密钥以。。。类似的东西可以在SQL环境中工作
如果您在创建行之前将EnPLID显示给用户,那么考虑一个模型,其中首先插入行以保留密钥,用户从这里只更新空白条目。当然,如果他们选择取消操作,您现在需要删除该行
我不是在讨论这是否是一个好的代码模式。对于那些说“ID应该只在DB中生成”的程序员,我同意,但是有很多有效的场景,您可能需要生成并使用“自然”密钥 我强烈建议使用“代理”(显式生成以标识行的任意键)键作为数据库中所有数据行的主要标识符,这简化了ORMs和其他数据工厂工具的使用 受保护的无效页面加载(对象发送方、事件参数e) { SqlConnection con=新的SqlConnection(strConnString)这是我的实际代码,它正在生成一个错误,因为无法将nvarchar值转换为1到数据类型int显示您的代码和更多解释。您也不应该这样做。保存数据时,ID应该在SQL端生成。否则,多个用户可以“生成”相同的ID(通过同时输入该页面)或者,在另一方面,如果仅仅因为用户进入该页面就在DB上创建了一个ID,那么用户可以直接退出而不保存,许多ID将被浪费。
SELECT 'TOO' + Cast(MAX(Right(EMPID, LEN(EMPID)-3) + 1)
FROM Employee
WHERE EMPID LIKE 'TOO%'
str = "select count(*) from employee";
com = new SqlCommand(str, con);
con.Open();
count = Convert.ToInt16(com.ExecuteScalar()) + 1;
txt_empid.Text = "E00" + count;
con.Close();
}
protected void btn_insert_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=HP-PC;Initial Catalog=kriti;Integrated Security=True");
con.Open();
str = "insert into employee values('" + txt_empid.Text.Trim() + "','" + txt_empname.Text.Trim() + "'," + txt_sal.Text.Trim() + ")";
com = new SqlCommand(str, con);
com.ExecuteNonQuery();
con.Close();
Label4.Text = "Records successfully Inserted";
}