尝试将数据插入多个表时出错 [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]
。
尝试使用using
statements 并将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] [关闭]的主要内容,如果未能解决你的问题,请参考以下文章