[更新]
如果你去的第二个方案,我会后你必须做的事情的例子。我假设你正在使用MS SQL Server,存储过程也是你的选择。
首先,我将在这个例子中使用一个简单的形式:
<form id="form1" runat="server">
<div>
<asp:DropDownList runat="server" ID="ddl">
<asp:ListItem Text="A" Value="A"></asp:ListItem>
<asp:ListItem Text="B" Value="B"></asp:ListItem>
<asp:ListItem Text="C" Value="C"></asp:ListItem>
<asp:ListItem Text="D" Value="D"></asp:ListItem>
</asp:DropDownList>
<asp:Button runat="server" ID="btn"
OnClick="btn_Click" Text="Add form" />
<asp:Label runat="server" ID="label" />
</div>
</form>
添加它处理按钮点击的方法:
protected void btn_Click(object sender, EventArgs e)
{
var year = DateTime.Now.Year.ToString();
var yearDigits = year.Substring(year.Length - 2);
var generatedId = SaveForm(yearDigits, ddl.SelectedValue);
label.Text = generatedId;
}
添加您的连接字符串的地方在那里它从SaveForm
访问方法:
const string connectionString = @"yourConnectionString";
添加执行插入的方法并返回自动生成的ID:
private string SaveForm(string yearDigits, string userOption)
{
string autoId;
using (var sqlConnection = new SqlConnection(connectionString))
{
try
{
sqlConnection.Open();
using (var sqlCommand = new SqlCommand("AddForm", sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("year", SqlDbType.Char, 2)
.Value = yearDigits;
sqlCommand.Parameters.Add("option", SqlDbType.Char, 1)
.Value = userOption;
var outputParameter = new SqlParameter();
outputParameter.ParameterName = "autoId";
outputParameter.Direction = ParameterDirection.Output;
outputParameter.SqlDbType = SqlDbType.Char;
outputParameter.Size = 14;
sqlCommand.Parameters.Add(outputParameter);
sqlCommand.ExecuteNonQuery();
autoId = outputParameter.Value.ToString();
}
}
catch (Exception)
{
// TODO: manage exception
throw;
}
}
return autoId;
}
在SQL服务器端,我们将使用一个简单的表:
CREATE TABLE [dbo].[Forms](
[Id] [int] IDENTITY(1,1) NOT NULL,
[GeneratedId] [char](14) NOT NULL,
CONSTRAINT [PK_Forms] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
)
现在,添加存储过程,而将插入宿舍数据和意志返回自动生成的ID:
CREATE PROCEDURE [dbo].[AddForm]
@year char(2),
@option char(1),
@autoId char(14) output
AS
BEGIN
DECLARE @rows int
SELECT
@rows = (SELECT COUNT(*) FROM [Forms]),
@autoId = 'FF-'[email protected]+'-'+Replace(Str(
CASE
WHEN @rows = 0 THEN 1
ELSE
IDENT_CURRENT('Forms')+1
END
, 6), ' ' , '0')+'-'[email protected]
INSERT Forms (GeneratedId) VALUES (@autoId)
END
这应该是全部。
_00001 ... 00004是自动递增值__下一次当另一个用户打开窗体时,它会分配新生成的ID_,所以它来自数据库? – 2013-03-06 09:54:12
“形式”(顺便说一句“什么是形式”)和db行,列,表之间有什么关系?该情景真的不清楚(乍一看) – 2013-03-06 09:54:50
您需要在保存之前显示自动生成的ID吗? – 2013-03-06 10:01:49