【发布时间】:2019-05-02 18:18:46
【问题描述】:
我尝试将数据插入图片所示表格中的 ansatID 列。用户必须在 DataGridView 中标记一行,在左侧的 textBox1 中插入他的 ID,然后按下按钮“Tilføj ansat til vagten”,他的 ID 应该插入到 DataGridView 中标记行的列 ansatID 中。但我收到错误消息:''无法将值 NULL 插入'Dato'列,表'Vagtplan.dbo.Vagter';列不允许空值。插入失败。该语句已终止。'' 我想知道为什么该语句会尝试将数据插入“Dato”列?我试过以下代码:
private void button5_Click(object sender, EventArgs e)
{
try
{
String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
SqlConnection myconnection = new SqlConnection(ConnectionString);
myconnection.Open();
SqlCommand AddNumberCommand = myconnection.CreateCommand();
AddNumberCommand.CommandText = "INSERT INTO dbo.Vagter ([ansatID]) VALUES (@ansatID)";
AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;
AddNumberCommand.ExecuteNonQuery();
myconnection.Close();
MessageBox.Show("Du har valgt vagten.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
列 ansatID 是表中的外键,列 ansatID 可以为空。 预期结果是应将 ansatID 插入到 DataGridView 中标记行的列 ansatID 中。该表显示在所附图片上。
【问题讨论】:
-
根据错误信息,Dato 是不可为空的类型。由于您没有为其提供值,因此 sql 将插入 null。您应该在 SSMS 中使该类型可以为空。
-
您的插入需要为
Dato列提供值,因为Dato不允许空值并且没有默认值。当您插入一行时,Dato中必须有一些内容。它什么都没有。你需要提供一些东西。 -
当您
INSERT一行时,每列的值都会被评估。如果未传递任何值,则使用DEFAULT值,如果没有,则该列将填充NULL。您尚未在INSERT中定义Dato并且它似乎没有DEFAULT值,因此使用了NULL,但是,由于该列设置为NOT NULL,因此不允许使用该值INSERT失败。 -
另一方面,很高兴看到一个格式良好的问题和有人使用带有
Parameters.Add的参数化语句;继续努力:)
标签: c# sql-server winforms insert