2017-06-27 40 views
0

嗨 我有這個defenition SQL表:無效的列名中插入一行時,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): Invalid column name 'Gender'. Invalid column name 'WantedGender'. Invalid column name 'Age'. Invalid column name 'WantedAgeRange'. Invalid column name 'TakenLikes'. Invalid column name 'Hot'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at...

和temp是對象從一個類與這些項目:

long TelegramId, TakenLikes; 
string UserName, FName, LName; 
int Age, WantedAgeRange, Gender, WantedGender, Hot; 

我該如何解決這個錯誤? 謝謝

+0

確保您的SqlConnection指向數據庫一樣的數據庫,在那裏'[DBO]。[表]'創建.. –

+0

使用Profiler來看看具體是什麼發送到你的數據庫 – GuidoG

+0

檢查烏爾連接字符串 – Nithin

回答

0

兩件事情:

  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) ... 
    

Note: I strongly recommend creating a stored procedure to do this. And invoking it from ADO.NET

我還懷疑的東西可能與Table選擇的表名是橫行。是否有可能重新命名這個,並在查詢中完全限定它?像[dbo].[User]

除了這個,我建議複製查詢文本並直接在SSMS中運行。它可能會給你一個更明確的錯誤,並將作爲一個調試步驟的服務器有用。

+0

我定義查詢與stringbuilder和使用'['和']'befor和列名後,但錯誤再次顯示 – Lionking89

+0

@ Lionking89查看答案。 – pimbrouwers

相關問題