为什么返回列名或提供的值数与表定义不匹配?

时间:2017-10-02 16:03:29

标签: c# sql-server

我正在使用C#,我想在我的SQL Server数据库中插入一些值,这是我的数据库定义:

CREATE TABLE [dbo].[Users]
(
    [Id] INT NOT NULL IDENTITY (1,1) PRIMARY KEY DEFAULT 1000, 
    [FullName] VARCHAR(50) NULL, 
    [Pseudo] VARCHAR(50) NULL, 
    [Mail] VARCHAR(50) NULL, 
    [Password] VARCHAR(50) NULL, 
    [Organism] VARCHAR(50) NULL, 
    [RegistredAt] DATETIME NULL, 
    [Confirmed] INT NULL
)

以及我如何尝试使用C#:

将值插入数据库
 SqlCommand command = new SqlCommand("INSERT INTO Users VALUES(@FullName, @Pseudo, @Mail, @Password, @Organism, @RegistredAt, @Confirmed)", con);

 command.Parameters.AddWithValue("@FullName", FullName);
 command.Parameters.AddWithValue("@Pseudo", Pseudo);
 command.Parameters.AddWithValue("@Mail", Mail);
 command.Parameters.AddWithValue("@Password", Password);
 command.Parameters.AddWithValue("@Organism", Organism);
 command.Parameters.AddWithValue("@RegistredAt", DateTime.Now);
 command.Parameters.AddWithValue("@Confirmed", Confirmed);

 con.Open();
 int i = command.ExecuteNonQuery();
 con.Close();

当我执行代码时,指令command.ExecuteNonQuery();返回异常:

  

列名或提供的值数与表定义不匹配

错误在哪里?

1 个答案:

答案 0 :(得分:3)

可能需要在你的查询中提供列名:

performTagMatching(tagArray: string[]): any {
    for (let tagElem of tagArray) {
        // create search request for tag lookup
        const searchRequest: SearchRequest = {
            term: tagElem,
            operation: 'exact'
        };

        this.callMactchFunc(tagElem)
    }
}

private callMactchFunc(tagElem) {
    this.apiClientService.findTagByTitle(searchRequest).subscribe(
        (response) => {
            // Check tag search result for existence of tag
            if (response.length == 0) {
                // No tag found -> create tag and add to search tag list
                this.searchFilter['tags'].push(this.saveNewTag(tagElem));
            } else {
                // Tag found -> add to search tag list
                this.searchFilter['tags'].push(response[0]);
            }
        },
        (error) => {
            console.log(error);
        }
    );
}

如果您不提供列名,则假定您要使用所有列,包括ID字段。这就是错误的原因 - 您为一个包含8列的表提供了7个值。由于您使用的是子集,因此需要指定它们。

此外,我不确定你是否处于可以修复的阶段,但你在“RegistredAt”中输入错误 - 它应该是“注册 e redAt”。< / p>