我在SQL Server数据库中有一个表SupplierMaster
,其中包含SUPPLIERNAME
列。
我想使用带有以下查询的存储过程编辑保存的供应商名称
ALTER PROCEDURE [dbo].[usp_SupplierMasterUpdateDetails]
(
@SUPPLIERNAME NVARCHAR(50)
)
AS
BEGIN
UPDATE [dbo].[SupplierMaster]
SET [SUPPLIERNAME] = @SUPPLIERNAME
WHERE [SUPPLIERNAME] = @SUPPLIERNAME
END
我通过" UPDATE BUTTON"运行BELOW代码。更新数据。
string connString = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand("usp_SupplierMasterUpdateDetails", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
// Parameter
cmd.Parameters.AddWithValue("SUPPLIERNAME", AddSupplierTextBox.Text);
// Open Connection
conn.Open();
// ExecuteReader (Select Statement)
// ExecuteScalar (Select Statement)
// ExecuteNonQuery (Insert, Update or Delete)
cmd.ExecuteNonQuery();
MessageBox.Show("SUCCESSFULLY UPDATED", "Successful", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
但它没有更新所选数据。
请建议并协助我纠正正确工作的代码。
答案 0 :(得分:1)
那里有多个问题。
首先,您需要像Thomas Levesque建议的那样修复更新查询。 例如,SQL Server表需要主键才能唯一地标识记录。
您可以做的最简单的事情是将主键设置为int类型的标识并使其自行生成。您的供应商表格可能如下所示:
SupplierID int, Primary Key, identity
SupplierName nvarchar(100)
现在,当你进行更新时,你会这样做:
Update SupplierMaster
Set SupplierName = @supplierName
Where SupplierID = @suplierID
这样的SQL语句将返回一个int值。此返回值将告诉您此更新语句已更改的SQL行数。如果它显示为0则表示SQL语句无法找到您传递的ID并且没有任何更改。如果它显示为1,则表示已找到并更新记录,如果超过1,则表明SQL语句存在问题且更新了多行。
在您的代码中检查此返回值以及您如何确定更新语句是否成功。