尝试将数据插入多个表时出错 [C# Winform SQL Server] [关闭]

Posted

技术标签:

【中文标题】尝试将数据插入多个表时出错 [C# Winform SQL Server] [关闭]【英文标题】:Error when trying to insert data to multiple table [C# Winform SQL Server] [closed] 【发布时间】:2016-06-11 19:52:32 【问题描述】:

尝试在多个表中插入数据时出现以下错误。

关键字“用户”附近的语法不正确

按钮点击代码:

 private void buttonSave_Click(object sender, EventArgs e) 
   SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleTest1.Properties.Settings.SampleTestDBConnectionString"].ConnectionString);
   SqlCommand cmd = conn.CreateCommand();
   try 
    UserId = UserId + 1;

    cmd.CommandText = "INSERT INTO [User](User_Id,Name,Gender,Is_Active,Created_Date,Activated_Date) values(@userid,@name,@gender,@isactive,@createdate,@activedate)";
    conn.Open();
    cmd.Parameters.AddWithValue("@userid", SqlDbType.Int).Value = UserId;
    cmd.Parameters.AddWithValue("@name", SqlDbType.VarChar).Value = textBoxName.Text;
    cmd.Parameters.AddWithValue("@gender", SqlDbType.VarChar).Value = textBoxGender.Text;
    cmd.Parameters.AddWithValue("@isactive", SqlDbType.Bit).Value = "True";
    cmd.Parameters.AddWithValue("@createdate", SqlDbType.Date).Value = System.DateTime.Today;
    cmd.Parameters.AddWithValue("@activedate", SqlDbType.DateTime).Value = System.DateTime.Now;
    cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();

    cmd.CommandText = "INSERT INTO User_Details(User_Id,Mobile,Address,Job_Contract) values(@userid,@mobile,@address,@jobcontract)";
    cmd.Parameters.AddWithValue("@userid", SqlDbType.Int).Value = UserId;
    cmd.Parameters.AddWithValue("@mobile", SqlDbType.VarChar).Value = textBoxMobile.Text;
    cmd.Parameters.AddWithValue("@address", SqlDbType.VarChar).Value = textBoxAddress.Text;
    cmd.Parameters.AddWithValue("@jobcontract", SqlDbType.VarChar).Value = textBoxJobContract.Text;
    cmd.ExecuteNonQuery();
    conn.Close();
   

我已将UserId 值声明为

static int UserId = 100;

不知道出了什么问题。如果需要更多详细信息,请发表评论。

参考:

LINK 1 : ASP.NET C# 向多个表中插入数据

LINK 2 : 一次插入两个表。

LINK 3 : 在插入语句中出现语法错误

LINK 4 : 在 SQL Server 中同时向两个表中插入数据

【问题讨论】:

Getting syntax error in INSERT INTO statement的可能重复 User 是保留关键字,您应该将其括在方括号中,如重复答案中的示例。 我也试过这些 dbo.User 、 [User] 和 [SampleTestDB].[dbo].[User] 但没有一个奏效。我也很确定我的模式只是 dbo。仍然不确定出了什么问题。 您以错误的方式使用 AddWithValue。 AddWithValue 的第二个参数是您要传递的值。通过这种方式,您的所有参数都创建为 Integer 类型,然后您(在返回的参数实例中)有时分配一个不同类型的值。首先按照说明修复用户关键字问题,然后将所有 AddWithValue 更改为简单的 Add。顺便说一句,像连接和命令这样的一次性对象应该包含在 using 语句中。当你现在写它时,你有内存泄漏的风险 @Steve - 我尝试了上述关于 User 的 cmets 为 dbo.[User],[User][SampleTestDB].[dbo].[User],但没有一个成功。我还尝试按照您的建议使用using 语句更改我的代码,并将AddWithValue 更改为Add。同样的问题仍然存在。 【参考方案1】:

用户是保留关键字,所以你需要像下面这样使用它

Insert into [User] (columns) values (@Values);

希望对你有帮助!

【讨论】:

我也试过这些 dbo.User、[User] 和 [SampleTestDB].[dbo].[User] 但没有一个奏效。仍然不确定出了什么问题。 尝试使用 parameter.Add 而不是 Parameter.Addwithvalue 进行检查! 这个链接会对你有所帮助 -- ***.com/questions/5445663/… 我尝试了你的建议(正如史蒂夫在评论中提到的那样),但同样的错误仍然存​​在。还尝试使用事务查询插入表 1(用户),然后插入表 2(用户详细信息)。错误还是一样。【参考方案2】:

嗯,我终于尝试解决这个问题的数据库设计逻辑。

INSERT INTO 语句中,我使用了大部分建议的编辑在 cmets 中作为dbo.[User][User][SampleTestDB].[dbo].[User]。 尝试使用usingstatements 并将AddWithValue更改为Add 尝试使用事务查询插入[User]table,然后插入[User_Details]table。 当然,尝试清理并重建解决方案,因为我同时使用多个实例和版本的 Visual Studio。

问题:

我将[User]表中的User_Id声明为Primary,NOT NULL,Unique[User_Details]table 中作为Primary,NOT NULL 并使用自动增量索引。

在按钮单击代码中,我只使用了static int,它与[User]table 的INSERT 语句冲突,因为它包含Unique 属性。

解决方案:

通过删除并重新创建具有与[User_Details] 表相同User_Id 约束的[User] 表解决了这个问题。 (删除了[User]表中的Unique约束)

【讨论】:

以上是关于尝试将数据插入多个表时出错 [C# Winform SQL Server] [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHP 将数据插入 MySQL 表时出错

由于带有 sequelize.js 的 UUID 外键,尝试将行插入表时出错

将图片插入sql表时出错

尝试通过 C# 将日期插入 .accdb 但数据出错

将数据从 HDFS 复制到 Hive 中的外部表时出错

当我在 c# sql 的 listview 中插入多个产品时出错。怎么了?