如何使用cmd.Parameters.AddWithValue

时间:2017-05-26 19:12:07

标签: c# sql sql-server

我已经尝试了几个小时,在这个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)";

查看上面的代码,不确定我错过了什么。

2 个答案:

答案 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,这样你就不会违反约束条件。