【发布时间】:2018-10-08 12:52:54
【问题描述】:
我在尝试插入副本时遇到 SQL 异常,但 SQL 错误未发送到消息框。我可以在调试中看到错误。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using static AccountManager.productinsert.BusinessLogic;
namespace AccountManager
{
public partial class ProductAdd : Form
{
public ProductAdd()
{
InitializeComponent();
}
public void CleartextBoxes1()
{
ProductId.Clear();
ProductName.Clear();
ProductPrice.Clear();
}
private void BtnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void BtnSubmit_Click(object sender, EventArgs e)
{
try
{
var product = new ProductDetails();
product.ProductId = ProductId.Text;
product.ProductName = ProductName.Text;
product.ProductPrice = ProductPrice.Text;
AddProduct(product);
MessageBox.Show("Product Created!");
CleartextBoxes1();
}
catch (SqlException)
{
MessageBox.Show("Product Already Exists");
}
}
}
}
调试的错误是
捕获的异常异常:“System.Data.SqlClient.SqlException”在 AccountManager.exe ("违反 UNIQUE KEY 约束 'UQ__Products__B40CC6CC7010A856'。无法插入重复键 对象'dbo.Products'。重复键值为 (1)。该声明 已终止。") System.Data.SqlClient.SqlException
按要求添加产品的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountManager
{
class productinsert
{
public class BusinessLogic
{
public static void AddProduct(ProductDetails details)
{
using (SqlConnection openCon = new SqlConnection("Data Source=.;Initial Catalog=AccountMGR;Integrated Security=True;"))
{
var statement = "insert into Products(" +
" ProductId, ProductName, Price)" +
" values(" +
" @ProductId," +
" @ProductName," +
" @Price)";
using (SqlCommand queryInsert = new SqlCommand(statement))
{
queryInsert.Connection = openCon;
queryInsert.Parameters.Add("@ProductId", SqlDbType.VarChar, 30).Value = details.ProductId;
queryInsert.Parameters.Add("@ProductName", SqlDbType.VarChar, 30).Value = details.ProductName;
queryInsert.Parameters.Add("@Price", SqlDbType.VarChar, 30).Value = details.ProductPrice;
openCon.Open();
try
{
queryInsert.ExecuteNonQuery();
}
catch (SqlException)
{
}
}
}
}
public class ProductDetails
{
public string ProductId { get; set; } = "";
public string ProductName { get; set; } = "";
public string ProductPrice { get; set; } = "";
}
}
}
}
【问题讨论】:
-
如果你按 F5 继续调试会发生什么?
-
catch (SqlException ex) { MessageBox.Show("产品已经存在。" + ex.Message); }
-
@Kevin 你应该把这个作为答案发布,这样它就可以被接受,你可以赢得有趣和惊人的东西!
-
可以发一下
AddProduct的出处吗?它可能正在包装或隐藏异常。 -
如果您想在 UI 中捕获并显示异常,您必须删除业务逻辑类中的空 try/catch 块
标签: c# sql messagebox