如何使用cmd.Parameters.AddWithValue

Pat*_*ick 0 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");
Run Code Online (Sandbox Code Playgroud)

cmd.ExecuteNonQuery(); // 这是抛出错误的地方

            MessageBox.Show("Record Inserted", "Record Entered Successfully!");
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这个但同样的问题。

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)";
Run Code Online (Sandbox Code Playgroud)

看看上面的代码,不知道我错过了什么。

fla*_*Zer 5

Stackoverflow 警告我回复过多,因此我将回复改为答案。

当您请求 SQL MGMT STUDIO 提供 INSERT 语句的 SQL 时,您使用了 SQL MGMT STUDIO 提供的模板。它提供的模板不是实际的插入语句,而是帮助您创建实际插入的指南。我提供的应该是基于您在 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)";
Run Code Online (Sandbox Code Playgroud)

评论和其他答案中提出的另一点是 ORDERID...因为它被定义为<OrderID, nvarchar(50)>,强烈建议更改表设计,以便该列是用户将没有机会修改的AUTO_INCREMENTED IDENTITY列。

例如,TSQL 定义应如下所示:

[OrderId] [int] IDENTITY(1,1) NOT NULL
Run Code Online (Sandbox Code Playgroud)