【问题标题】:I cannot see the added values for the variables in the columns in Visual Studio, but I see them in the SQL server. Why?我在 Visual Studio 的列中看不到变量的附加值,但我在 SQL 服务器中看到了它们。为什么?
【发布时间】:2019-01-26 23:54:46
【问题描述】:

我正在制作一个用于从 MS SQL 服务器添加和读取客户的 Visual Studio 项目。无法看到我通过 Visual Studio 发布的值。

下面是 SQL 代码:

create Table Person
(

Id int PRIMARY KEY,
FirstName varchar (15),
LastName varchar (15),
TaxNbr int,
BirthDate DATETIME,
AktivStatus varchar (15),
);

这是我为客户添加新价值的 C# 部分:

private void Button_AddCustomer(object sender, RoutedEventArgs e)
    {


        Person customer = new Person();
        int number;
        customer.FirstName = FirstName.Text.Trim();
        customer.LastName = LastName.Text.Trim();
        if (int.TryParse(TaxNbr.Text, out number) == false) MessageBox.Show("Must add a valid tax number");
        if (number < 0 || number > 999) MessageBox.Show("Invalid Tax Number. Must be between 0 and 999");
        else customer.TaxNbr = number;

        customer.BirthDate = BirthDate.DisplayDate; 
        if (Aktiven.IsChecked == true) customer.AktivStatus = "Aktiven";
        if (Neaktiven.IsChecked == true)
        {
            customer.AktivStatus = "Neaktiven";
        }

        CustomerClass.AddCustomer(customer);
        DialogResult = true;

    }

我已将它与 SQL 类连接起来:

public static class CustomerClass
{
    #region

    public static void AddCustomer(Person customer)
    {
        using (CustomerDataContext conn = new CustomerDataContext())
        {
            conn.Persons.InsertOnSubmit(customer);
            conn.SubmitChanges();

        }

    }
    #endregion
}

请帮忙,我是初学者:)

【问题讨论】:

  • 嘿,您是什么意思,在 Visual Studio 中看不到变量的值?此外,当您运行代码并单击按钮时会发生什么?是否将新客户添加到数据库中?
  • 是的,但我只能在 SQL 表中看到。
  • 当我尝试在 Visual Studio 中添加时,我收到以下消息:“System.Data.SqlClient.SqlException:'违反主键约束'PK__Person__3214EC070A523E0B'。无法在对象'dbo.Person 中插入重复键'。重复键值为 (0)。语句已终止。' "
  • 您似乎在一遍又一遍地尝试添加 ID=0 的客户。
  • 您应该将 ID 列设置为使用 IDENTITY 自动递增

标签: c# sql-server visual-studio


【解决方案1】:

问题是你创建的每个人的 id 都是 0 ,并且由于数据库中的 ID 列没有标记为身份 SQL 服务器将尝试在每个人插入时插入 0 的值,所以第一次它将成功并插入 id = 0 的新人,但第二次将失败,因为已经有一个 id 为 0 的人需要将 pk 标记为身份,这样 SQL Server 将自动处理 id 值并且你赢了'甚至不需要从你的 C# 代码中发送它的值

或者您可以自己管理 ID,并确保您没有在此列中插入任何不推荐的重复值

【讨论】:

  • 我在 SQL 中添加了 SET IDENTITY_INSERT Person on ,但现在我得到了这个:“ System.Data.SqlClient.SqlException: 'Cannot insert explicit value for identity column in table 'Person' when IDENTITY_INSERT is set to离开。' "
  • 正如我所说,如果您将 ID 列设置为标识,SQL 服务器将处理此列的插入,并为您创建一个序列,以便您可以按升序排列 1 ,2,3,4,5,6 等您唯一需要做的就是不要将 C# 代码中的 ID 值发送到数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
相关资源
最近更新 更多