У меня есть таблица с первичной и внешней ключами ID
, первичный ключ id
от LeaveCategory
и внешний ключ = LeaveCategoryId
. Но я получаю эту ошибку:Невозможно вставить значение NULL в столбец «ID», таблица
Cannot insert the value NULL into column 'ID', table 'dbo.Action'; column does not allow nulls. INSERT fails
Но я действительно не знаю, как исправить эту проблему.
Это моя ошибка:
Это код:
public partial class AddLeaveType : System.Web.UI.Page
{
int id = 0;
SqlConnection conn = null;
SqlCommand cmd = null;
string connectionString = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlDataReader dr = null;
connectionString = ConfigurationManager.ConnectionStrings["LeaveManagementCS"].ConnectionString;
conn = new SqlConnection(connectionString);
string sql = "SELECT * FROM LeaveCategory";
try
{
cmd = new SqlCommand(sql, conn);
conn.Open();
dr = cmd.ExecuteReader();
while(dr.Read())
{
ListItem item = new ListItem(dr["Category"].ToString(), dr["Id"].ToString());
ddlCategory.Items.Add(item);
}
dr.Close();
}
catch (Exception ex)
{
lblOutput.Text = "Error Message: " + ex.Message;
}
finally
{
if (conn != null)
conn.Close();
}
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
connectionString = ConfigurationManager.ConnectionStrings["LeaveManagementCS"].ConnectionString;
conn = new SqlConnection(connectionString);
string sql = "INSERT INTO LeaveType (Type, Description, NumOfDays) ";
sql += "VALUES (@type, @desc, @nod)";
try
{
cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@type", tbType.Text);
cmd.Parameters.AddWithValue("@desc", tbDesc.Text);
cmd.Parameters.AddWithValue("@nod", tbNod.Text);
conn.Open();
int rows = cmd.ExecuteNonQuery();
if (rows > 0)
{
lblOutput.Text = "Added successfully";
}
}
catch (Exception ex)
{
lblOutput.Text = "Error Message:" + ex.Message;
}
finally
{
if (conn != null)
conn.Close();
}
}
}
Правильный выход:
это нормально, потому что он закрывает соединение, я думаю, что .close в значительной степени является .dispose, если вы посмотрите на него в отражателе. – Cato
Да, но глобальные переменные всегда являются рискованное дело. И я не вижу, какое преимущество он получает от глобального объекта соединения в этом контексте. – Steve
Да, я согласен, он ничего не получает и может быть сделано неправильно – Cato