查询不会更新表格。

13 浏览
0 Comments

查询不会更新表格。

我正在使用存储过程来完成更新查询,并且我已经设置了消息框在查询成功执行时显示。当我点击按钮时,消息框弹出,但表格没有更新。我在SQL Server中运行相同的查询,它更新了表格,但无法通过C#更新。

我已经在SQL Server中尝试了相同的代码,代码运行正常。当命令执行时,消息框弹出。

如果(IsUpdate)

{

MessageBox.Show("Clicked");

txtCustomerName.Enabled = false;

using(SqlConnection con = new SqlConnection(ApplicationSettings.ConnectionString()))

{

using(SqlCommand cmd = new SqlCommand("usp_customer_updateProducts",con))

{

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@Contact", Contact);

cmd.Parameters.AddWithValue("@Address", address);

cmd.Parameters.AddWithValue("@PAN", PAN);

cmd.Parameters.AddWithValue("@VAT", VAT);

cmd.Parameters.AddWithValue("@CustomerName", CustomerName);

con.Open();

try

{

MessageBox.Show(CustomerName);

cmd.ExecuteNonQuery();

MessageBox.Show("Customer Updated Successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);

this.Close();

CustomerRecordForm crf = new CustomerRecordForm();

crf.Show();

}

catch(Exception ex)

{

MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

finally

{

con.Close();

}

}

}

}

以下是存储过程的代码:

ALTER procedure [dbo].[usp_customer_updateProducts]

(

@Contact varchar,

@Address varchar,

@PAN varchar,

@VAT varchar,

@CustomerName varchar

)

as

begin

update [dbo].[CustomerInfo]

set [ContactNo]=@Contact,

[Address]=@Address,

[PAN]=@PAN,

[VAT]=@VAT

where [CustomerID] = (select CustomerID from CustomerInfo where CustomerName=@CustomerName)

end

0
0 Comments

问题: Query does not update the table

原因: 在查询中,varchar数据类型没有分配长度,因此只会取一个字符。

解决方法:

1. 为varchar数据类型分配长度,确保其可以存储所需的字符数。

2. 检查每个列的数据类型和长度,确保它们与表中定义的列匹配。

3. 如果您知道客户ID,请将客户ID作为参数发送,而不是客户姓名,这将对您和SQL Server都有帮助。

4. 更新存储过程时,请确保定义了varchar参数的长度,并将其与表中的列匹配。

以下是更新后的存储过程示例:

ALTER procedure [dbo].[usp_customer_updateProducts]

(

@CustomerName varchar(100), -- 需要定义长度

@ContactNo varchar(2000),

@Address varchar(50),

@PAN varchar(50),

@VAT varchar(50) -- 如果您知道客户ID,请发送客户ID而不是客户姓名。

)

as

begin

SET NOCOUNT ON; -- 请使用SET NOCOUNT ON,它会稍微提高性能。

UPDATE [dbo].[CustomerInfo]

SET [ContactNo] = @ContactNo,

[Address] = @Address,

[PAN] = @PAN,

[VAT] = @VAT

WHERE CustomerName = @CustomerName -- 您可以直接在where条件中使用客户姓名。

end

0
0 Comments

根据您分享的查询和输入,有一个建议修改,目前您在过程中传递了,现在要么在insert时已经处理好确保不会插入重复的姓名记录到您的表中,要么这绝对是一个生产中遇到的错误。

现在来看看您当前的查询部分,您从前端传递了CustomerName,所以根据这个姓名选择您的id并将其保存在一个变量中,然后用于更新记录。

declare @CustomerId int
set @CustomerId = (select CustomerID from CustomerInfo where CustomerName= 'YourCustomerName')
update [dbo].[CustomerInfo]
    set [ContactNo] = 'YourContactNo',
        [Address] = 'YourAddress',
        [PAN] = 'YourPAN',
        [VAT] = 'YourVAT'
    where [CustomerID] = @CustomerId

为了调试目的,您可以从过程中返回这个id并在代码中保存它,以检查到底是哪个id被用于更新。

0