我已经尝试了几个小时,在这个SQL查询中找不到错误,得到异常"<"
Connection con = new OrderManager.Connection();
SqlCommand cmd = new SqlCommand();
string query = @"INSERT INTO [MasterDatabase].[dbo].[Neworder]
([OrderID]
,[Date]
,[Customer_Name]
,[Quality]
,[Color]
,[PCs]
,[Cutting]
,[TotalYards])
VALUES
(<OrderID, nvarchar(50),>
,<Date, varchar(25),>
,<Customer_Name, varchar(25),>
,<Quality, varchar(25),>
,<Color, varchar(25),>
,<PCs, varchar(25),>
,<Cutting, varchar(25),>
,<TotalYards, varchar(25),>)";
cmd = new SqlCommand(query, con.ActiveCon());
cmd.Parameters.AddWithValue("@OrderID", TxtBox_OrderID.Text);
cmd.Parameters.AddWithValue("@Date", dateTimePicker1.Value.ToString());
cmd.Parameters.AddWithValue("@Customer_Name", txtbox_CusName.Text);
cmd.Parameters.AddWithValue("@Quality", combo_Quality.Text);
cmd.Parameters.AddWithValue("@Color", combo_Color.Text);
cmd.Parameters.AddWithValue("@PCs", updown_PCs.Text);
cmd.Parameters.AddWithValue("@Cutting", combo_Cutting.Text);
cmd.Parameters.AddWithValue("@TotalYards", "Total Yards");
cmd.ExecuteNonQuery(); //这是错误抛出的地方
MessageBox.Show("Record Inserted", "Record Entered Successfully!");
我也试过使用这个但同样的问题。
string query = @"INSERT INTO [MasterDatabase].[dbo].[Neworder]
(OrderID)
,(Date)
,(Customer_Name)
,(Quality)
,(Color)
,(PCs)
,(Cutting)
,(TotalYards)
VALUES
(@OrderID)
,(@Date)
,(@Customer_Name)
,(@Quality)
,(@Color)
,(@PCs)
,(@Cutting)
,(@TotalYards)";
查看上面的代码,不确定我错过了什么。
答案 0 :(得分:4)
Stackoverflow警告我有太多的回复,所以我把我的回答转移到答案中。
当您请求SQL MGMT STUDIO为INSERT语句提供SQL时,您使用了该模板。它提供的模板不是实际的插入语句,而是一个帮助您创建实际插入的指南。我提供的内容应该是基于您在c#中提供的参数的“真实”插入语句。
此外,VALUES部分中的所有参数都应括在括号内,而不是单独包含在每个参数中。
string query = @"INSERT INTO [MasterDatabase].[dbo].[Neworder]
([OrderID]
,[Date]
,[Customer_Name]
,[Quality]
,[Color]
,[PCs]
,[Cutting]
,[TotalYards])
VALUES
(@OrderID
,@Date
,@Customer_Name
,@Quality
,@Color
,@PCs
,@Cutting
,@TotalYards)";
在评论和其他答案中提出的另一点是 ORDERID 列...因为它被定义为<OrderID, nvarchar(50)>
,强烈建议更改表格设计,以便列是 AUTO_INCREMENTED IDENTITY 列,用户无法修改此列。
例如,TSQL定义应该是:
[OrderId] [int] IDENTITY(1,1) NOT NULL
答案 1 :(得分:0)
避免PKey冲突:
string query = @"INSERT INTO [MasterDatabase].[dbo].[Neworder]
([Date]
,[Customer_Name]
,[Quality]
,[Color]
,[PCs]
,[Cutting]
,[TotalYards])
VALUES
(@Date
,@Customer_Name
,@Quality
,@Color
,@PCs
,@Cutting
,@TotalYards)";
那应该有用。如果没有,那是因为你必须自己生成一个独特的新@OrderID
,这样你就不会违反约束条件。