sql server返回long.parse显示错误

时间:2018-07-12 10:41:48

标签: c# sql .net sql-server ado.net

我当前的问题是SQL Server。我正在编写自己的查询,其中一个查询是针对表中的INSERT数据。这很容易做到。我在测试过程中收到错误,这并不容易。我只是断点了所有步骤,除了最终结果,其他所有方法都工作正常。

问题长期存在吗?因为当我使用bool时,它可以正常工作,但是我需要使用很长的时间。

现在让我们看看我的代码里面有什么

public long Create(TPerson person)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        var insert = string.Format(@"INSERT INTO CisOsoba(Jmeno, Prijmeni, Email, TelKlapka, TelKlapka2, TelMob)
                                         VALUES(@jmeno, @prijmeni, @email, @telKlapka, @telKlapka2, @telMob)");

        connection.Open();
        SqlCommand cmd = new SqlCommand(insert, connection);

        cmd.Parameters.AddWithValue("@jmeno", person.FirstName);
        cmd.Parameters.AddWithValue("@prijmeni", person.LastName);
        cmd.Parameters.AddWithValue("@email", person.Email);
        cmd.Parameters.AddWithValue("@telKlapka", person.Phone1);
        cmd.Parameters.AddWithValue("@telKlapka2", person.Phone2);
        cmd.Parameters.AddWithValue("@telMob", person.PhoneMob);

        return long.Parse(cmd.ExecuteScalar().ToString());
    }
}

当我在return long.Parse(cmd.ExecuteScalar().ToString());行处有断点并且跳入内部时,出现错误:

  

“类型为'System.NullReferenceException'的未处理异常   发生在Business.WeighingSystem.dll

     

其他信息:对象引用未设置为的实例   对象。”

我真的不知道我不需要设置哪个对象。

感谢每一个提示! :)

1 个答案:

答案 0 :(得分:5)

似乎您正在尝试返回受命令影响的行数。在这种情况下,您需要改用ExecuteNonQuery

return long.Parse(cmd.ExecuteNonQuery());

基于MSDN

  

对于UPDATE,INSERT和DELETE语句,返回值是该命令影响的行数。当要插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。