查询工作正常,但 SQLCommand 抛出 'invalid name'

Query works fine,but SQLCommand throws 'invalid name'

我有这个查询字符串,当我手动 运行 它时它工作正常:

private const string _sold_products_query = @"SELECT rp.Id, pl.ProductName, rp.Price, rp.[StatusDate] FROM [dbo].product_name_list as pl INNER JOIN [dbo].sold_products as rp ON pl.Id = rp.FK_product_name_list;";

如果我这样做仍然不起作用:

private const string _sold_products_query = @"SELECT rp.Id, pl.ProductName, rp.Price, rp.StatusDate FROM dbo.product_name_list as pl INNER JOIN dbo.sold_products as rp ON pl.Id = rp.FK_product_name_list;";

如果像这样把括号放在各处也是一样的:

private const string _sold_products_query = @"SELECT [rp].[Id], [pl].[ProductName], [rp].[Price], [rp].[StatusDate] FROM [dbo].[product_name_list] as pl INNER JOIN [dbo].[sold_products] as rp ON [pl].[Id] = [rp].[FK_product_name_list];";

但是当我将它作为参数放入 SQLCommand 对象和 运行 methon ExecuteReader 时它抛出这个异常:

System.Data.SqlClient.SqlException: 'Invalid column name 'StatusDate'.'

代码:

SqlCommand command = new SqlCommand(_sold_products_query, conn);
SqlDataReader dataReader = command.ExecuteReader();

查询表:

创建 TABLE 语句:


    CREATE TABLE [product_name_list] (
        [Id]                    int NOT NULL PRIMARY KEY IDENTITY(1,1),
        [ProductName]           varchar(255) NOT NULL UNIQUE
    );
    
    CREATE TABLE [sold_products] (
        [Id]                    int NOT NULL PRIMARY KEY IDENTITY(1,1),
        [FK_product_name_list]  int FOREIGN KEY REFERENCES product_name_list(Id),
        [Price]                 decimal,
        [StatusDate]                    Date
    );

连接字符串工作正常,因为另一个查询工作。有谁知道为什么它不起作用?

可能是 [] 括号导致了问题。尝试删除它们或更改为以下内容。

private const string _sold_products_query = @"SELECT [rp].[Id], [pl].[ProductName], [rp].[Price], [rp].[StatusDate] FROM [dbo].[product_name]_list as pl INNER JOIN [dbo].[sold_products] as rp ON [pl].[Id] = [rp].[FK_product_name_list];";

通常,您会在所有内容或什么都不使用方括号。在我看来,这种方式要好得多,而不是在某些数据上使用方括号而不是其他数据。

如何调试:

exec sp_columns sold_products 来自您的 C# 代码将为您提供来自 table sold_products 的所有列信息,如果与您在 SSMS 中看到的不同,您正在连接到不同的实例或数据库。

您的 SqlConnection 或 DbConnection 有 属性 ConnectionString

从 SSMS 获取连接信息

每个 SSMS window 的底部是以下状态栏。 (截图来自SSMS 18)

  1. 是你的实例
  2. 是您的登录名
  3. 是当前连接的数据库。

(你也可以在SSMS的属性window中看到这个)

Connectionstring 属性应与您的 SSMS 连接匹配。

额外

在 ssms 中,如果您使用注册服务器 window (CTRL+ALT[=46=,您甚至可以一次连接到多个实例]+G)。已连接将显示 X/Y。 X = 打开的连接数,Y 是尝试的连接数。如果您需要一次查询多个实例,这很有用。