gpt4 book ai didi

c# - 存储过程不适用于 c# 代码

转载 作者:太空狗 更新时间:2023-10-29 23:22:33 25 4
gpt4 key购买 nike

我正在尝试在 C# 中调用存储过程。

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "updateData";
command.Parameters.Add(new SqlParameter("@inrego", rego));
command.Parameters.Add(new SqlParameter("@inOprt", oprt));
command.Parameters.Add(new SqlParameter("@inService", service));

connection.Open();

int update = command.ExecuteNonQuery();

Console.WriteLine(update);

connection.Close();
}

更新在控制台上显示为 1,但数据库仍未更新。

这是存储过程

CREATE PROCEDURE [dbo].updateData
@inrego varchar(5),
@inOprt char(3),
@inService as varchar(50)

AS
delete from buses where rego = @inrego;
insert into buses (rego, operator,service) values(@inrego, @inOprt, @inService);
RETURN 0

也可以手动运行存储过程

USE [C:\USERS\---\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\---\TEST.DB.MDF]
GO

DECLARE @return_value Int

EXEC @return_value = [dbo].[updateData]
@inrego = N'1',
@inOprt = N'2',
@inService = N'3'

SELECT @return_value as 'Return Value'

GO

有效,并成功更新数据库,但 C# 代码没有。

最佳答案

我无法在干净的本地数据库(MS SQL EXPRESS 2013、Win 8.1、.NET 4.5)上重现该问题:

CREATE TABLE [dbo].buses
(
[rego] varchar(5) NOT NULL PRIMARY KEY,
[operator] char(3),
[service] varchar(50)
)
static void UpdateOrInsertBuses(String rego, String oprt, String service)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "updateData";
command.Parameters.Add(new SqlParameter("@inrego", rego));
command.Parameters.Add(new SqlParameter("@inOprt", oprt));
command.Parameters.Add(new SqlParameter("@inService", service));

connection.Open();
try
{
int update = command.ExecuteNonQuery();

Console.WriteLine(update);
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
finally
{
connection.Close();
}
}
}
}

// ...
// Add data
UpdateOrInsertBuses("11", "12", "13");
UpdateOrInsertBuses("21", "22", "23");

// Update added
UpdateOrInsertBuses("21", "22", "Changed for sure");

所以,这是一些与您当前代码无关的问题。正如@Gordon Linoff 所建议的那样,它要么是权限问题,要么是某个触发器干预了更新,或者数据库出于某种原因恢复或忽略了任何更改。

关于c# - 存储过程不适用于 c# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594285/

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