C# 向SQL Server数据库(nvarchar)添加记录时出错
我正在尝试将记录添加到SQL Server数据库。该连接适用于除一个表之外的任何其他表 这是我的代码:C# 向SQL Server数据库(nvarchar)添加记录时出错,c#,sql-server,database,dataset,C#,Sql Server,Database,Dataset,我正在尝试将记录添加到SQL Server数据库。该连接适用于除一个表之外的任何其他表 这是我的代码: private void saveCurrent() { try // Save entry into the database. { string query = "INSERT INTO entries VALUES (@Date, @Tags, @Entry, @User)"; using (connection = new Sq
private void saveCurrent()
{
try
// Save entry into the database.
{
string query = "INSERT INTO entries VALUES (@Date, @Tags, @Entry, @User)";
using (connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@Date", System.DateTime.Now.ToLongDateString());
command.Parameters.AddWithValue("@Tags", txtTags.Text);
command.Parameters.AddWithValue("@Entry", richEntryBox.Text);
command.Parameters.AddWithValue("@User", Form1.userName);
command.ExecuteNonQuery();
isDirty = false;
}
}
catch (Exception exception)
{
MessageBox.Show("There was an error saving this entry: " + exception.ToString());
}
错误是:
System.Data.SqlClient.SqlException(0x8-131904):提供的值的列名或数量与表定义不匹配
所有列的类型均为nvarchar(50)
和nvarchar(MAX)
。我试图只输入文本信息,而不是二进制文件。数据集显示该表有一个“photos”列,但它可以为null,我没有使用它(出于某种原因,我无法让VS2017删除该列)。我修改了数据集,使其不包含“photos”字段,但仍然收到错误。如能推动解决方案,我们将不胜感激。这里包含数据集的快照
我的数据集,在其中我删除了“照片”列:
--S如果您的数据库仍然有
photos
字段,则需要明确指定要插入的列
因此,请将插入内容更改为:
string query = "INSERT INTO entries (date, tags, entry, user) VALUES (@Date, @Tags, @Entry, @User)";
通常,您希望在插入时显式。如果有人在数据库中的标记之后和条目之前添加列,会发生什么情况?这将破坏您的代码。如果您的数据库仍然有
photos
字段,则需要明确指定要插入的列
因此,请将插入内容更改为:
string query = "INSERT INTO entries (date, tags, entry, user) VALUES (@Date, @Tags, @Entry, @User)";
通常,您希望在插入时显式。如果有人在数据库中的标记之后和条目之前添加列,会发生什么情况?这会破坏您的代码。在我看来,第一列的类型是
DATE
不是吗?但是您尝试插入的值是一个“字符串”。这不起作用。您是否尝试过为相关字段指定数据类型?“Addwithvalue”的问题是,它试图猜测您的数据类型实际上每个表列的列类型是什么?是否涉及任何触发器?“date”字段不是标准日期,它是自定义的,是文本。我已经指定表中的所有字段都是nvarchar-这就是你的意思吗?不涉及触发器。在我看来,第一列的类型是DATE
不是吗?但是您尝试插入的值是一个“字符串”。这不起作用。您是否尝试过为相关字段指定数据类型?“Addwithvalue”的问题是,它试图猜测您的数据类型实际上每个表列的列类型是什么?是否涉及任何触发器?“date”字段不是标准日期,它是自定义的,是文本。我已经指定表中的所有字段都是nvarchar-这就是你的意思吗?不用动扳机。谢谢你——这让我走得更远了。我修改了查询,使之与您列出的内容相匹配,并带有显式插入字段。奇怪的是,我现在得到一个错误“关键字“user”附近的语法不正确。谢谢!我有一个奇怪的拼写错误。得到纠正,使用您的建议显式添加字段,最后设法从数据库中删除照片字段,效果非常好。非常感谢!很高兴我能帮忙!谢谢,这让我走得更远了。我修改了查询,使之与您列出的内容相匹配,并带有显式插入字段。奇怪的是,我现在收到一个错误,上面写着“关键字“user”附近的语法不正确。谢谢!我有一个奇怪的拼写错误。得到纠正,使用你的建议显式添加字段,最后设法从数据库中删除photos字段,效果很好。非常感谢!很高兴我能提供帮助!