简体   繁体   English

C# System.Data.SqlClient.SqlException 无法将值 NULL 插入列 ERROR FOREIGN KEY

[英]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.

相关问题 System.Data.SqlClient.SqlException:无法将值 NULL 插入到列“IngredientId”、表“RecipeApplicationDb.dbo.IngredientModels”中; - System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'IngredientId', table 'RecipeApplicationDb.dbo.IngredientModels'; System.Data.SqlClient.SqlException C# - System.Data.SqlClient.SqlException C# C#MySQL错误System.Data.SqlClient.SqlException: - C# MySQL error System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException:&#39;INSERT语句与FOREIGN KEY约束冲突 - System.Data.SqlClient.SqlException: 'The INSERT statement conflicted with the FOREIGN KEY constraint Linq Windows窗体C#System.Data.SqlClient.SqlException - Linq Windows Form C# System.Data.SqlClient.SqlException c#System.Data.SqlClient.SqlException(0x80131904) - c# System.Data.SqlClient.SqlException (0x80131904) System.Data.SqlClient.SqlException:&#39;,&#39;附近的语法不正确。 C# - System.Data.SqlClient.SqlException: 'Incorrect syntax near ','.' c# 尝试从 C# 插入 SQL 行,抛出异常:'System.Data.SqlClient.SqlException' - Trying to insert SQL row from C#, throws exception: 'System.Data.SqlClient.SqlException' 错误System.Data.SqlClient.SqlException:&#39;将数据类型nvarchar转换为数字时出错。 在c#中 - Error System.Data.SqlClient.SqlException: 'Error converting data type nvarchar to numeric.' in c# 基于C#服务的数据库错误System.Data.SqlClient.SqlException(0x80131904) - C# Service Based Database error System.Data.SqlClient.SqlException (0x80131904)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM