将唯一标识符添加到要插入mssql数据库的c#表单中

时间:2014-02-26 15:01:38

标签: c# sql sql-server

我正在尝试将我的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();

1 个答案:

答案 0 :(得分:2)

您正在寻找IDENTITY COLUMN

例如

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);

    }
}