簡體   English   中英

在SQL數據庫中插入行時列名無效

[英]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;

如何解決此錯誤? 謝謝

兩件事情:

  1. 使用多行字符串定義查詢(或StringBuilder )。
  2. 轉義表字段。

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM