[英]C# System.Data.SqlClient.SqlException Cannot insert the value NULL into column ERROR FOREIGN KEY
Error Message showing up after trying to call foreign key, that is a primary key in another table.尝试调用外键后出现错误消息,外键是另一个表中的主键。
There's two tables and whats supposed to link them is the foreign key.有两个表,应该链接它们的是外键。
The SQL Server database does not allow, making the identity of both the primary key and the foreign key to true so it can auto increment SQL 服务器数据库不允许,使主键和外键的身份都为真,所以可以自增
System.Data.SqlClient.SqlException HResult=0x80131904 Message=Cannot insert the value NULL into column 'client_ID', table;
System.Data.SqlClient.SqlException HResult=0x80131904 Message=无法将值 NULL 插入表“client_ID”列; column does not allow nulls.
列不允许空值。
Code for the database class:数据库代码 class:
public static void AddVehicle(string serial_Number, string Make, string Model, string Year, string Color)
{
string insStmt = "INSERT INTO VEHICLE (serial_Number, Make, Model, Year, Color) VALUES (@serial_Number, @Make, @Model, @Year, @Color)";
SqlConnection conn = GetConnection();
SqlCommand insCmd = new SqlCommand(insStmt, conn);
insCmd.Parameters.AddWithValue("@serial_Number", serial_Number);
insCmd.Parameters.AddWithValue("@Make", Make);
insCmd.Parameters.AddWithValue("@Model", Model);
insCmd.Parameters.AddWithValue("@Year", Year);
insCmd.Parameters.AddWithValue("@Color", Color);
try
{
conn.Open();
insCmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
public static List<Vehicle> GetVehicle()
{
List<Vehicle> vehicleList = new List<Vehicle>();
SqlConnection conn = GetConnection();
string selStmt = "SELECT * FROM VEHICLE ORDER BY Make, Model";
SqlCommand selcCmd = new SqlCommand(selStmt, conn);
try
{
conn.Open();
SqlDataReader reader = selcCmd.ExecuteReader();
while (reader.Read())
{
Vehicle vehicle = new Vehicle();
//vehicle.Vehicle_ID = (int)reader["Vehicle_ID"];
vehicle.Vehicle_ID = reader["Vehicle_ID"].ToString();
vehicle.Serial_Number = reader["Serial_Number"].ToString();
vehicle.MAke = reader["MAke"].ToString();
vehicle.MOdel = reader["MOdel"].ToString();
vehicle.YEar = reader["YEar"].ToString();
vehicle.COlor = reader["COlor"].ToString();
vehicle.ClientID = (int)reader["ClientID"];
vehicleList.Add(vehicle);
}
reader.Close();
}
catch (SqlException ex) { throw ex; }
finally { conn.Close(); }
return vehicleList;
}
Code for the windows form is: windows 表格的代码是:
private void Form2_Load(object sender, EventArgs e)
{
listView.Items.Clear();
List<Vehicle> vehicleList;
try
{
vehicleList = CARDB.GetVehicle();
if (vehicleList.Count > 0)
{
Vehicle vehicle;
for (int i = 0; i < vehicleList.Count; i++)
{
vehicle = vehicleList[i];
//listView.Items.Add(vehicle.Vehicle_ID.ToString());
listView.Items[i].SubItems.Add(vehicle.Vehicle_ID);
listView.Items[i].SubItems.Add(vehicle.Serial_Number);
listView.Items[i].SubItems.Add(vehicle.MAke);
listView.Items[i].SubItems.Add(vehicle.MOdel);
listView.Items[i].SubItems.Add(vehicle.YEar);
listView.Items[i].SubItems.Add(vehicle.COlor);
listView.Items.Add(vehicle.ClientID.ToString());
}
}
//else { MessageBox.Show("Enter client Details", "Alert:");}
}
catch (Exception ex) { MessageBox.Show(ex.Message, ex.GetType().ToString()); }
}
private void btnSubmit2_Click(object sender, EventArgs e)
{
CARDB.AddVehicle(txtSerialNumber.Text, txtMake.Text, txtModel.Text, txtYear.Text, txtColor.Text);
txtSerialNumber.Text = "";
txtMake.Text = "";
txtModel.Text = "";
txtYear.Text = "";
txtColor.Text = "";
this.Form2_Load(this, null);
}
SQL code for the table is:表的 SQL 代码为:
CREATE TABLE [dbo].[Vehicle]
(
[Vehicle_ID] INT IDENTITY (1, 1) NOT NULL,
[client_ID] INT NOT NULL,
[Serial_Number] NVARCHAR(MAX) NULL,
[Make] NVARCHAR(MAX) NULL,
[Model] NVARCHAR(MAX) NULL,
[Year] NVARCHAR(MAX) NULL,
[Color] NVARCHAR(MAX) NULL,
PRIMARY KEY CLUSTERED ([Vehicle_ID] ASC),
CONSTRAINT [FK_Vehicle_Client]
FOREIGN KEY ([client_ID]) REFERENCES [dbo].[Client] ([clientID])
);
Your error is in this function as I see:如我所见,您的错误在这个 function 中:
public static void AddVehicle(string client_ID,string serial_Number, string Make, string Model, string
Year, string Color)
{
string insStmt = "INSERT INTO VEHICLE (client_ID,serial_Number, Make, Model, Year, Color)
VALUES (@client_ID,@serial_Number, @Make, @Model, @Year, @Color)";
SqlConnection conn = GetConnection();
SqlCommand insCmd = new SqlCommand(insStmt, conn);
insCmd.Parameters.AddWithValue("@client_ID", client_ID);
insCmd.Parameters.AddWithValue("@serial_Number", serial_Number);
insCmd.Parameters.AddWithValue("@Make", Make);
insCmd.Parameters.AddWithValue("@Model", Model);
insCmd.Parameters.AddWithValue("@Year", Year);
insCmd.Parameters.AddWithValue("@Color", Color);
try
{
conn.Open();
insCmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
You are missing the client_ID
in the insert SQL statement, hence you get the error of Client Id being null.您在 insert SQL 语句中缺少
client_ID
,因此您会收到 Client Id 为 null 的错误。
You need to pass client_ID
to the Add Vehicle function or your function INSERT
statement will definitely fail.您需要将
client_ID
传递给 Add Vehicle function 否则您的 function INSERT
语句肯定会失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.