0

我正在尝试编写一个 CRUD 应用程序,但 Create 方法有问题。程序因错误而崩溃

System.Data.SqlClient.SqlException:'违反主键约束'PK_Pracownicy'。无法在对象“dbo.Pracownicy”中插入重复键。重复键值为 (11)。该语句已终止。'

但是我可以在我的 SQL Server 中看到这个位置被添加到 Praconicy 表中,所以我不知道哪里有问题。在我将新值放入表后,它看起来像是生成了错误

在此处输入图像描述

class SqlHelper
{
    public int RowsLenght { get; set; }
    private SqlConnection sqlConnection;
    public string Command { get; set; }

    public SqlHelper(string connectionString)
    {
        sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();
       
    }
    public int Create(string command, SqlParameter []parameters)
    {
        //wykonanie polecenia na bazie
        using var cmd = new SqlCommand(command, sqlConnection);
        cmd.Parameters.AddRange(parameters);
        ShowTable(cmd);
        return cmd.ExecuteNonQuery();
    }
    public int Read(string command)
    {
        //wykonanie polecenia na bazie
        using var cmd = new SqlCommand(command, sqlConnection);
        ShowTable(cmd);
        return cmd.ExecuteNonQuery();
    }
    private int ShowTable(SqlCommand command)
    {
        var reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader.GetInt32(0) + "\t" + reader.GetString(2) + " " +
                reader.GetString(1) + "\t" + reader.GetString(3));
            RowsLenght++;
        }
        reader.Close();
        return RowsLenght;
    }
}

class Program
{
    static void Main()
    {
        SqlConnectionStringBuilder connectionString = new SqlConnectionStringBuilder
        {
            DataSource = @"HAL\MSSERVER",
            InitialCatalog = "ZNorthwind",
            IntegratedSecurity = true,
            ConnectTimeout = 30,
            Encrypt = false,
            TrustServerCertificate = false,
            ApplicationIntent = 0,
            MultiSubnetFailover = false
        };
        var connectionS = connectionString.ConnectionString;
        SqlHelper sql = new SqlHelper(connectionS);

        var command = "SELECT * FROM dbo.Pracownicy";
        sql.Read(command);

        command = "INSERT INTO dbo.Pracownicy (IDpracownika, Nazwisko, Imię, Stanowisko) VALUES (@IDpracownika, @Nazwisko, @Imie, @Stanowisko)";
        var parameters = SetUpParameters(sql.RowsLenght);
        sql.Create(command, parameters);
    }
    private static SqlParameter[] SetUpParameters(int lenght)
    {
        //inicjalizacja zmiennych:
        Console.WriteLine("Podaj imie nowego pracownika: ");
        var fname = Console.ReadLine();
        Console.WriteLine("Podaj nazwisko pracownika: ");
        var lname = Console.ReadLine();
        Console.WriteLine("Podaj stanowisko pracownika: ");
        var position = Console.ReadLine();

        SqlParameter []param = new SqlParameter[4];
        param[0] = new SqlParameter("IDpracownika", lenght + 1);
        param[1] = new SqlParameter("Imie", fname);
        param[2] = new SqlParameter("Nazwisko", lname);
        param[3] = new SqlParameter("Stanowisko", position);

        return param;
    }
}

谢谢

4

0 回答 0