Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程无法从c#代码工作_C#_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

存储过程无法从c#代码工作

存储过程无法从c#代码工作,c#,sql,sql-server,tsql,stored-procedures,C#,Sql,Sql Server,Tsql,Stored Procedures,我正在尝试调用C#中的存储过程 更新在控制台上显示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

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

更新在控制台上显示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):


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

你试过了吗?我想你可能只是需要“dbo.updateData”来打电话。就试过@EugenePodskal。不幸的是,同样的结果。@GordonLinoff将其修改为在开始时添加dbo,但仍然没有working@matthew5025 . . . 可能是权限问题。我实际上是“Microsoft SQL Server数据库文件(SqlClient)”作为数据源,我将尝试使用SQL Server。因此,这是一个仅与数据库文件相关的问题,而不是与托管数据库文件相关的问题?嗯,我稍后会尝试使用数据库文件DB,只是为了检查一下。
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
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");