2014-02-26 56 views
1

我想将我的c#表单链接到一个数据库,该数据库可以包含表单中插入的所有数据。将一个唯一标识符添加到要插入到mssql数据库中的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(); 

回答

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

    } 
} 
+0

你将IDENTITY(1,1)添加到默认值或绑定到mssql服务器中? – SamMan

+0

这是一个属性,用于在Sql Server中定义您的列。使用Sql Server Management Studio或任何允许更改表格模式的工具 – Steve

+0

很喜欢它,但请仔细阅读IDENTITY列链接中的注释 – Steve

相关问题