【发布时间】:2021-11-15 07:28:33
【问题描述】:
我正在尝试将一个对象插入到本地 SQL Server 数据库中。我目前面临的问题是这个错误:
System.Data.SqlClient.SqlException:“INSERT 语句中的列数少于 VALUES 子句中指定的值。VALUES 子句中的值数必须与 INSERT 语句中指定的列数匹配。”
错误本身看起来很明显,但在下面的代码中我不再理解了。
知道Kategorie 是表Kategorien 中的外键可能会有所帮助。
我正在调用的方法:
public static void Add(Artikel artikel)
{
ExecuteSQL($"INSERT INTO [dbo].[Artikel] ([Id], [Name], [Preis], [Kategorie]) VALUES ('{artikel.ID}', '{artikel.Name}',{artikel.Preis}, (SELECT TOP 1 Id FROM Kategorien WHERE Id = '{artikel.Kategorie.ID}'))");
}
ExecuteSQL方法:
private static void ExecuteSQL(string sqlText)
{
SqlConnection connection = Init();
SqlCommand sqlCommand = new SqlCommand(sqlText, connection);
sqlCommand.ExecuteNonQuery();
}
Artikel 表:
希望任何人都可以帮助我。
【问题讨论】:
-
不确定数据类型是什么,但是,如果 Preis 是非整数并且您使用 , 对于小数位,那么您的 SQL 最终会看起来像“...VALUES (1, ArtikelNaam, 12,00, (SELECT...)" 从 SQL 的角度来看,它看起来像是一个附加条目,而不是一个浮点数。
-
如果您已经知道类别中的 Id,为什么还要在该点插入查询以检索 Id 值?但是,您真的应该停止以这种方式编写 SQL。使用参数。如果 Name 包含单引号怎么办?
-
如果您输出 'string sqlText' 作为 ExecuteSQL 方法的输入,它可能会更清楚出了什么问题。
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
我希望你明白你应该使用参数而不是字符串连接!
标签: c# sql-server database