C# 和 SQL 初学者在这里。我有两个表使用主键table1
作为外键table2
。为了获得一个 ID,我正在使用SELECT MAX
并且一切都按我想要的方式工作(下面的代码):
{
con1.Open();
SqlCommand cmd1 = new SqlCommand();
cmd1.CommandText = "INSERT INTO dbo.testDriver(name) Values(@name)";
cmd1.Connection = con1;
cmd1.Parameters.AddWithValue("@name", name.Text);
cmd1.ExecuteNonQuery();
cmd1.Parameters.Clear();
cmd1.CommandText = "SELECT MAX(PkDriverID) FROM dbo.testDriver";
int FkDriverID = Convert.ToInt32(cmd1.ExecuteScalar());
cmd1.CommandText = "INSERT INTO dbo.testCar(brand, model, FkDriverID) Values(@brand, @model, @FkDriverID)";
cmd1.Connection = con1;
cmd1.Parameters.AddWithValue("@brand", brand.Text);
cmd1.Parameters.AddWithValue("@model", model.Text);
cmd1.Parameters.AddWithValue("@FkDriverID", FkDriverID);
cmd1.ExecuteNonQuery();
cmd1.Parameters.Clear();
con1.Close();
}
{
Response.Redirect(this.Request.Url.ToString());
}
但是同事告诉我我应该使用SCOPE_IDENTITY()
而不是SELECT MAX
. 我确实理解为什么要使用它(在多个用户的情况下等),但是在替换SELECT MAX
它之后,我得到一个错误:
对象不能从 DBNull 转换为其他类型。
在我的数据库中,PK 和 FK 具有 int 数据类型,不允许使用 Null,并且SELECT MAX
可以正常工作。那么我在这里做错了什么?