我在 Visual Studio 的列中看不到变量的附加值,但我在 SQL 服务器中看到了它们。为啥?

Posted

技术标签:

【中文标题】我在 Visual Studio 的列中看不到变量的附加值,但我在 SQL 服务器中看到了它们。为啥?【英文标题】: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 自动递增 【参考方案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 值发送到数据库

以上是关于我在 Visual Studio 的列中看不到变量的附加值,但我在 SQL 服务器中看到了它们。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

我在 Visual Studio Code-JavaScript 中看不到输出

Visual Studio 中的 DB 项目中的 DB 视图在同一项目中看不到同义词

cmake 项目在 Visual Studio 2017 中看不到

Windbg可以看到Visual Studio中看不到的有效函数调用堆栈

我无法在Visual Studio的列中看到变量的附加值,但我在SQL服务器中看到它们。为什么?

tslint 在 Visual Studio 代码中不起作用