[英]Invalid column name when inserting a row to sql database
嗨,我有一個具有此定義的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;
如何解決此錯誤? 謝謝
兩件事情:
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中運行。 它可能會給您帶來更清晰的錯誤,並且服務器將用作調試步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.