gpt4 book ai didi

c# - 数据不会保存在我的数据库中

转载 作者:搜寻专家 更新时间:2023-10-30 23:32:27 26 4
gpt4 key购买 nike

我的数据不会保存在我的数据库中。它不会进入“产品已添加”,而是进入“产品 ID 已存在”,即使它不存在。这是代码:

private void btnAddProduct_Click(object sender, EventArgs e)
{
if(txtNewProductID.Text == "" || txtNewProductName.Text == "" || txtNewProductPrice.Text == "" || cboNewProductCategory.Text == "")
{
MessageBox.Show("Please fill up the form!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

else
{
int prodQty = Convert.ToInt32(txtNewProductQuantity.Text);
decimal prodPrice = Convert.ToDecimal(txtNewProductPrice.Text);

if (!myData.AddProducts(txtNewProductID.Text, txtNewProductName.Text, prodQty, prodPrice, cboNewProductCategory.Text))
{
MessageBox.Show("Product has been added!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

else
{
if (MessageBox.Show("Product ID already exist", "Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning) == DialogResult.Retry)
{
txtNewProductID.Clear();
txtNewProductName.Clear();
txtNewProductPrice.Clear();
txtNewProductQuantity.Clear();
}
}
}
}

这是我的类库中的代码:

public bool AddProducts(string productID, string productName, int productQuantity, decimal productPrice, string productCategory)
{
bool recordFound = false;
myCon.Open();

try
{
SqlCommand saveProduct = new SqlCommand("AddProduct", myCon);
saveProduct.CommandType = CommandType.StoredProcedure;
saveProduct.Parameters.Add("@ProductID", SqlDbType.NVarChar).Value = productID;
saveProduct.Parameters.Add("@ProductName", SqlDbType.VarChar).Value = productName;
saveProduct.Parameters.Add("@ProductName", SqlDbType.Int).Value = productQuantity;
saveProduct.Parameters.Add("@ProductPrice", SqlDbType.Decimal).Value = productPrice;
saveProduct.Parameters.Add("@ProductCategory", SqlDbType.NVarChar).Value = productCategory;
saveProduct.ExecuteNonQuery();
myCon.Close();
}
catch
{
myCon.Close();
recordFound = true;
}

return recordFound;
}

这是我的存储过程:

CREATE PROCEDURE [dbo].[AddProduct]
@ProductID nvarchar(50),
@ProductName varchar(50),
@ProductQuantity int,
@ProductPrice decimal(18,2),
@ProductCategory nvarchar(50)
AS
INSERT INTO ProductsTbl
VALUES (@ProductID, @ProductName, @ProductQuantity, @ProductPrice, @ProductCategory)
RETURN 0

有什么问题吗?

最佳答案

您在此处遇到复制粘贴问题:

saveProduct.Parameters.Add("@ProductName", SqlDbType.VarChar).Value = productName;
saveProduct.Parameters.Add("@ProductName", SqlDbType.Int).Value = productQuantity;

相反,它必须是:

saveProduct.Parameters.Add("@ProductName", SqlDbType.VarChar).Value = productName;
saveProduct.Parameters.Add("@ProductQuantity", SqlDbType.Int).Value = productQuantity;

顺便说一句,不要使用Catch 来关闭连接。相反,我强烈建议对连接和命令使用 using 语句。确保每次完成此方法时关闭连接。请注意,con.Close 不会关闭物理连接,它只是告诉连接池它已准备好在其他地方使用。否则你会阻止它,这样每次新连接都必须打开:

public bool AddProducts(string productID, string productName, int productQuantity, decimal productPrice, string productCategory)
{
bool recordFound = false;

try
{
using (var myCon = new SqlConnection("Connection-String from config-file"))
using (var saveProduct = new SqlCommand("AddProduct", myCon))
{
saveProduct.CommandType = CommandType.StoredProcedure;
saveProduct.Parameters.Add("@ProductID", SqlDbType.NVarChar).Value = productID;
saveProduct.Parameters.Add("@ProductName", SqlDbType.VarChar).Value = productName;
saveProduct.Parameters.Add("@ProductQuantity", SqlDbType.Int).Value = productQuantity;
saveProduct.Parameters.Add("@ProductPrice", SqlDbType.Decimal).Value = productPrice;
saveProduct.Parameters.Add("@ProductCategory", SqlDbType.NVarChar).Value = productCategory;
myCon.Open(); // will be closed implicitely at the end of the using
saveProduct.ExecuteNonQuery();
}
}
catch (SqlException ex) when (new[] {2627, 2601}.Contains(ex.ErrorCode))
{
// index constraint
recordFound = true;
}
catch(Exception otherExceptions)
{
// log this!
throw; // don't ignore it
}

return recordFound;
}

关于c# - 数据不会保存在我的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47593131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com