2

我有一个字母数字 ID。我如何自动增加(+1)数字?

我应该将调查 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;
    }
}
4

4 回答 4

3

您可以使用组合键作为主键。一列是字母数字代码,另一列是数字。在整数列中,您可以设置为身份,sql 会为您完成这项工作。

设置组合键。创建两列,一列整数和一列varchar。在列上选择一个,向下移动选择第二个,然后在菜单中选择键的按钮将它们设置为键。

然后转到属性 > 标识列并从下拉列表中选择整数列。

组合键示例在您选择菜单中的键后,您将看到两列都有一个键

在此处输入图像描述

选择列作为标识示例

在此处输入图像描述

于 2013-11-12T01:52:30.137 回答
2

如果该SVY部分只是一个前缀,我将只存储整数并将前缀和整数连接起来以供显示。如果已修复,则无需将其包含在密钥中

于 2013-11-12T01:54:02.757 回答
1

1)从sql中获取总行数。

2) 内部btnCreateSurvey_Click,总行数 + 1

3)Session["SurveyID"] = txtBoxSurveyID.Text + totalRowCount.ToString().PadLeft(4, '0'); //Assuming your textBoxSurvey ID is always "SVY"

于 2013-11-12T02:07:51.713 回答
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()which 将返回刚刚插入的 id 列的值。

于 2013-11-12T02:10:22.797 回答