将唯一标识符添加到要插入到 mssql 数据库中的 C# 窗体



我正在尝试将我的 c# 表单链接到可以保存表单中插入的所有数据的数据库。

其他四个字段已正确插入到数据库中。

我遇到的问题是,每次创建新记录时,都需要在SQL表的最后一个字段中生成一个唯一标识符。

我能做到这一点的唯一方法是使用 GUID。但问题是我需要标识符从 1 开始并递增。

我不确定如何在 C# 中执行此操作,因此提供的任何帮助都将非常好。

这是我的代码

protected void Unnamed1_Click(object sender, EventArgs e)
{
    string box1value = TextBox1.Text;
    string box2value = TextBox2.Text;
    string box3value = TextBox3.Text;
    SqlConnection myConnection = new SqlConnection(sConnection);
    string sql = "INSERT INTO Part1Table (CustomerDetails, TechnologyPartner, ResponseDate, FormID, RowID) VALUES (@CustomerDetails, @TechnologyPartner, @ResponseDate, @FormID, @RowID)";

    myConnection.Open();
    try
    {
        // create a db command objet using the sql and db connection
        SqlCommand cmdIns = new SqlCommand(sql, myConnection);
        //box1value
        cmdIns.Parameters.Add("@CustomerDetails", SqlDbType.Char);
        cmdIns.Parameters["@CustomerDetails"].Value = box1value;
        //box2value
        cmdIns.Parameters.Add("@TechnologyPartner", SqlDbType.Char);
        cmdIns.Parameters["@TechnologyPartner"].Value = box2value;
        //box3value
        cmdIns.Parameters.Add("@ResponseDate", SqlDbType.DateTime);
        cmdIns.Parameters["@ResponseDate"].Value = box3value;
        cmdIns.Parameters.Add("@FormID", SqlDbType.Int);
        cmdIns.Parameters["@FormID"].Value = 1;
        cmdIns.Parameters.Add("@RowID", SqlDbType.UniqueIdentifier);
        cmdIns.Parameters["@RowID"].Value = Guid.NewGuid();
        // run the query
        cmdIns.ExecuteNonQuery();
        // end the command object
        cmdIns.Dispose();
        cmdIns = null;
    }
    catch(Exception ex)
    {
        Response.Write(ex);
    }
    myConnection.Close();

您正在寻找身份列

例如

CREATE TABLE [dbo].[Part1Table](
   [CustomerDetail] [nvarchar](50) NULL,
   ....
   [RowID] [int] IDENTITY(1,1) NOT NULL
CONSTRAINT [PK_City] PRIMARY KEY CLUSTERED 
(
    [RowID] ASC
)ON [PRIMARY]

如果您有标识列,则向每条新记录添加增量值的作业将传递到数据库引擎。

当然,您不能自己为此列传递值,但您可以使用命令读取数据库分配的值SCOPE_IDENTITY

 SELECT SCOPE_IDENTITY()

所以,总结你可以写

string sql = @"INSERT INTO Part1Table (CustomerDetails, TechnologyPartner, ResponseDate, 
               FormID) VALUES (@CustomerDetails, @TechnologyPartner, @ResponseDate, @FormID)";
using(SqlConnection myConnection = new SqlConnection(sConnection))
SqlCommand cmdIns = new SqlCommand(sql, myConnection);
{
   try
   {
       myConnection.Open();
       cmdIns.Parameters.Add("@CustomerDetails", SqlDbType.Char);
       cmdIns.Parameters["@CustomerDetails"].Value = box1value;
       //box2value
       cmdIns.Parameters.Add("@TechnologyPartner", SqlDbType.Char);
       cmdIns.Parameters["@TechnologyPartner"].Value = box2value;
       //box3value
       cmdIns.Parameters.Add("@ResponseDate", SqlDbType.DateTime);
       cmdIns.Parameters["@ResponseDate"].Value = box3value;
       cmdIns.Parameters.Add("@FormID", SqlDbType.Int);
       cmdIns.Parameters["@FormID"].Value = 1;
       // No parameter for the ROWID column. 
       // It will be an error to try to insert 
       // a value for that column
       cmdIns.ExecuteNonQuery();
       // Read back the value using the SAME connection used for the insert
       cmdIns.Parameters.Clear();
       cmdIns.CommandText = "SELECT SCOPE_IDENTITY()";
       object result = cmdIns.ExecuteScalar();
       int newRowID = Convert.ToInt32(result);
    }
}

最新更新