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