无法使用ExecuteScalar或ExecuteNon-Query插入记录

时间:2017-10-25 13:06:43

标签: sql-server tsql database-administration executenonquery executescalar

我有一个角色为sa的数据库。

当我执行将记录插入表的存储过程时。但是,当我通过ADO.NET代码运行相同的存储过程时,记录未成功插入。但是,我可以看到存储过程已被调用并成功运行到using (SqlConnection conn = new SqlConnection(ConnectionString)) { conn.Open(); using (SqlCommand command = conn.CreateCommand()) { command.CommandText = "InsertData"; command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@Id", Id); command.Parameters.AddWithValue("@name", Name); command.ExecuteNonQuery(); } }

尝试添加交易并提交但仍然没有运气。

CREATE PROCEDURE [dbo].[InsertData]
    @Id INT,
    @name VARCHAR(50)
AS
    SET NOCOUNT ON;

    INSERT INTO Employee (Id, Name) 
    VALUES (@Id, @name)
GO

var ConnectionString = "Data Source=xxxx;Initial Catalog=xxxx;Persist Security Info=True;User Id=xxxx;Password=xxxxx;MultipleActiveResultSets=True";

存储过程:

new ObjectMapper().configure(
DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY, 
false);

2 个答案:

答案 0 :(得分:2)

在花了一天之后终于解决了......我正在使用遗留代码。非常出色的人使用C#代码打开了一个事务。我们有这些方法,你创建一个新的SQL连接字符串,插入数据,然后我们没有完成该事务 - 它没有插入记录..

解决这个问题的最佳方法是找到“交易”这个词,你可能会发现:

TransactionOptions options = new TransactionOptions();
options.IsolationLevel = IsolationLevel.ReadCommitted;
transaction = new TransactionScope(TransactionScopeOption.RequiresNew, options);

答案 1 :(得分:0)

您的代码看起来很好,您可以尝试这样做吗?

using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();

        using (SqlCommand command = conn.CreateCommand())
        {
            string cmd = string.format("INSERT INTO PaymentDevices (Id, Name) VALUES ({0}, '{1}')",Id,Name);
            command.CommandText = cmd;
            command.CommandType = CommandType.Text;

            command.ExecuteNonQuery();              
        }   
  }

这可以帮助您确定问题所在,如果它有效则问题是您的 SP调用本身,如果它不起作用问题出在您的连接字符串中交易开启