使用存储过程检查ASP.NET中插入是否成功

时间:2018-08-30 16:35:58

标签: c# sql-server stored-procedures insert

我知道这可能是一个老问题,但是我对使用存储过程获取“受影响的行数”感到困惑。

这是我的代码:

public DataSet saveuser(string procedure, string username, string password)
{
    SqlConnection connection = new SqlConnection();

    SqlCommand command = new SqlCommand(procedure, connection);
    command.Parameters.AddWithValue("@username", username);
    command.Parameters.AddWithValue("@password", password);

    SqlAdapter adapter = new SqlAdapter(command);
    DataSet dataset = new DataSet();
    adapter.Fill(dataset);

    connection.Close();
    return dataset,
}

我尝试了以下代码:

int rowschanged = command.ExecuteNonQuery();

这似乎对我有帮助,但是当我检查数据库插入两次时。

你有什么主意吗?我可以使用SqlDataAdapter获取受影响的行数吗?

2 个答案:

答案 0 :(得分:1)

“受影响的行数”是查询本身的返回值,您可以做的是更改SP,如果成功则返回0,否则返回-1(当然可以是任何其他值,您将需要在SP代码中执行某种错误验证)

答案 1 :(得分:0)

我不确定您为什么要返回DataSet 如果您使用DataSet,这里的任何方法都是解决方案

public DataSet saveuser(string procedure, string username, string password)
        {
            SqlConnection connection = new SqlConnection();
            SqlCommand command = new SqlCommand(procedure, connection);
            command.Parameters.AddWithValue("@username", username);
            command.Parameters.AddWithValue("@password", password);
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataSet dataset = new DataSet();
            connection.Open();
            adapter.Fill(dataset);
            var count = dataset.Tables?[0].Rows.Count;
            connection.Close();
            return dataset;
        }

,如果要使用DataTable

public DataTable SaveuserwithDataTable(string procedure, string username, string password)
        {
            SqlConnection connection = new SqlConnection();
            SqlCommand command = new SqlCommand(procedure, connection);
            command.Parameters.AddWithValue("@username", username);
            command.Parameters.AddWithValue("@password", password);
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable dt = new DataTable();
            connection.Open();
            adapter.Fill(dt);
            var count = dt.Rows.Count;
            connection.Close();
            return dt;
        }

希望有帮助!