将行插入sql database

时间:2017-06-27 10:51:43

标签: c# sql-server database visual-studio

您好 我有一个带有这种定义的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 个答案:

答案 0 :(得分: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) ...
    
  3.   

    注意:我强烈建议您创建存储过程来执行此操作。并从ADO.NET中调用它

    我还怀疑选择的表名Table可能会有些问题。是否可以重命名,并在查询中完全限定它?像[dbo].[User]

    这样的东西

    除此之外,我建议复制查询文本并直接在SSMS中运行。它可能会给你一个更明确的错误,并且将服务器用作调试步骤。