您好 我有一个带有这种定义的SQL表:
CREATE TABLE [dbo].[Table] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[TelegramId] BIGINT NULL,
[Username] VARCHAR (50) NOT NULL,
[FName] VARCHAR (50) NOT NULL,
[LName] VARCHAR (50) NOT NULL,
[Gender] BIT NOT NULL,
[WantedGender] BIT NOT NULL,
[Age] INT NOT NULL,
[WantedAgeRange] INT NOT NULL,
[TakenLike] BIGINT NOT NULL,
[Hot] BIT NOT NULL,
CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ([Id] ASC)
);
当我尝试使用以下代码向此表添加行时:
using (SqlConnection con = new SqlConnection(conStr))
{
con.Open();
using (SqlCommand cmd = new SqlCommand(@"INSERT INTO [Table](TelegramId, UserName, FName, LName, Gender, WantedGender, Age, WantedAgeRange, TakenLikes, Hot)" +
" VALUES (@telID, @username, @fname, @lname, @gender, @wgender, @age, @wage, @tlikes, @hot)", con))
{
cmd.Parameters.AddWithValue("@telID", temp.TelegramId);
cmd.Parameters.AddWithValue("@username", temp.UserName);
cmd.Parameters.AddWithValue("@fname", temp.FName);
cmd.Parameters.AddWithValue("@lname", temp.LName);
cmd.Parameters.AddWithValue("@gender", temp.Gender);
cmd.Parameters.AddWithValue("@wgender", temp.WantedGender);
cmd.Parameters.AddWithValue("@age", temp.Age);
cmd.Parameters.AddWithValue("@wage", temp.WantedAgeRange);
cmd.Parameters.AddWithValue("@tlikes", "0");
cmd.Parameters.AddWithValue("@hot", "0");
cmd.ExecuteNonQuery();
bot.SendTextMessage(53654050, "added to Table...");
}
}
但我收到此错误:
System.Data.SqlClient.SqlException(0x80131904):列名称无效'性别'。 列名称无效' WantedGender'。 列名称无效'年龄'。 列名称无效' WantedAgeRange'。 列名称无效' TakenLikes'。 列名称无效' Hot'。 在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action`1 wrapCloseInAction) 在...
,temp是来自具有以下项目的类的对象:
long TelegramId, TakenLikes;
string UserName, FName, LName;
int Age, WantedAgeRange, Gender, WantedGender, Hot;
如何修复此错误? 谢谢
答案 0 :(得分:0)
两件事:
StringBuilder
)。转义表格字段。
string query = @"INSERT INTO [Table]([TelegramId], [UserName], [FName], [LName], [Gender], [WantedGender], [Age], [WantedAgeRange], [TakenLikes], [Hot])
VALUES (@telID, @username, @fname, @lname, @gender, @wgender, @age, @wage, @tlikes, @hot)";
using(SqlCommand cmd = new SqlCommand(query, con) ...
注意:我强烈建议您创建存储过程来执行此操作。并从ADO.NET中调用它
我还怀疑选择的表名Table
可能会有些问题。是否可以重命名,并在查询中完全限定它?像[dbo].[User]
?
除此之外,我建议复制查询文本并直接在SSMS中运行。它可能会给你一个更明确的错误,并且将服务器用作调试步骤。