我有一个字母数字的id。我如何自动增加(+1)数字?
我应该将Survey ID设置为SVY0001到SVY9999。
每次添加新调查时,如何将数字增加1?
目前我的调查ID文本框中有一个正则表达式验证器,SVY是强制性的。
ValidationExpression="^SVY([0-9]{4})$"
请告诉我。
这是我的.cs代码。
protected void btnCreateSurvey_Click(object sender, EventArgs e)
{
SqlConnection connection = null;
SqlCommand command = null;
try
{
string connectionString = ConfigurationManager.ConnectionStrings["SurveyFdDBConnString"].ConnectionString;
connection = new SqlConnection(connectionString);
connection.Open();
string sql = "Insert into Survey (SurveyID, SurveyName, CreatedBy, DateCreated, Anonymous) Values " + "(@SurveyID, @SurveyName, @CreatedBy, @DateCreated, @Anonymous)";
command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@SurveyID", txtBoxSurveyID.Text);
command.Parameters.AddWithValue("@SurveyName", txtBoxSurveyName.Text);
command.Parameters.AddWithValue("@CreatedBy", (string)Session["UserID"]);
command.Parameters.AddWithValue("@DateCreated", DateTime.Now);
command.Parameters.AddWithValue("@Anonymous", txtBoxAnonymous.Text);
int rowCount = command.ExecuteNonQuery();
if (rowCount != 0)
{
Session["SurveyID"] = txtBoxSurveyID.Text;
Response.Write("Survey created successfully.<br/>");
Response.Redirect("~/Admin/Select.aspx");
}
}
catch (Exception ex)
{
Response.Write("Error: " + ex.Message);
}
finally
{
connection.Close();
txtBoxSurveyID.Text = string.Empty;
txtBoxSurveyName.Text = string.Empty;
txtBoxAnonymous.Text = string.Empty;
}
}
答案 0 :(得分:3)
您可以使用组合键作为主键。在一列中包含字母数字代码,在另一列中包含数字。在整数列中,您可以设置为identity,sql为您完成工作。
设置组合键。创建两列,一个整数和一个varchar。在列中选择一个,然后选择第二个,然后在菜单中选择键的按钮,将它们设置为键。
然后转到属性&gt;标识列并从下拉列表中选择整数列。
组合键示例在菜单中选择键后,您会看到两列都带有键
选择列作为标识示例
答案 1 :(得分:2)
如果SVY
部分只是一个前缀,我只会存储整数并连接前缀和整数以用于显示目的。如果它已修复,则无需将其包含在密钥中
答案 2 :(得分:1)
1)从sql获取总行数。
2)在btnCreateSurvey_Click
内,总行数+ 1
3)Session["SurveyID"] = txtBoxSurveyID.Text + totalRowCount.ToString().PadLeft(4, '0'); //Assuming your textBoxSurvey ID is always "SVY"
答案 3 :(得分:0)
您可以这样做:
class SurveyId
{
static int counter = 0 ;
static readonly object Syncroot = new object() ;
public override string ToString()
{
return string.Format( "SVY{0:0000}" , this.Value )
}
public int Value { get ; private set ; }
private SurveyId( int value )
{
this.Value = value ;
}
public static SurveyId GetNext()
{
lock ( Syncroot )
{
++counter ;
}
return new SurveyId(counter) ;
}
}
虽然每次应用域都被回收时,您的调查ID都会从SVY0000重新启动。
在您的数据库中,您可以执行此操作并让数据库管理调查ID
create table dbo.survey
(
id int not null identity(1,1) ,
survey_id as 'SVY' + right('0000'+convert(varchar,id),4) ,
name varchar(255) not null ,
-- other
-- attributes
-- here
constraint Survey_PK primary key clustered ( id ) ,
constraint Survey_AK01 unique nonclustered ( survey_id ) ,
)
您的插入语句将变为类似
insert dbo.survey (name) values( 'foobar')
select scope_identity()
您需要使用SQLCommand.ExecuteScalar()
,它将返回刚刚插入的id列的值。