C # Заполнить объект - PullRequest
       6

C # Заполнить объект

0 голосов
/ 19 октября 2018

Я знаю, что люди будут кричать, что эта тема повсюду в Интернете.Я знаю, я прочитал их.И я до сих пор не понимаю этого.Я просто хочу заполнить свой объект из результатов хранимой процедуры.Теперь эта хранимая процедура принимает как минимум 2 параметра - действие и что найти.

@Action @customername

@Action просто определите, что должна делать хранимая процедура, и вернет результаты.Так, например, если я хочу обновить клиента, я бы вызвал sp через мой объект:

public class Customer()
{
    //properties

    public int UpdateCustomer()
    {
        using (SQLConnection connection = new SqlConnection(Helper.CnnVal("DataConnection")))
        {
            SQLCommand = new SqlCommand(Helper.Procedure("Customer"), connection);

            command.CommandType = CommandType.StoredProcedure;

            SqlParameterCollection parameterCollection = command.Parameters;

            parameterCollection.Add("@Action", SqlDbType.NVarChar, -1).Value = "Update"

            //complete the rest of it....
        }
    }
}

Это работает хорошо.Таким образом, проблема возникает, когда я просто хочу заполнить объект результатами sp.В этом случае я бы передал «Retrieve» в качестве параметра @Action и this.customer_name в качестве параметра @customername в sp.

Но как мне поместить результаты хранимой процедуры в объект?

У меня есть это ...

    public void GetCustomer()
    {
        using (SQLConnection connection = new SqlConnection(Helper.CnnVal("DataConnection")))
        {
            var retrieval = new DynamicParameters();

            retrieval.Add("@Action", "Retrieve");
            retrieval.Add("@name", this.customer_Name);

            connection.Open():
            connection.Execute(Helper.Procedure("Customer"), retrieval, commandType: CommandType.StoredProcedure);
        }
    }

Но я не думаю, что это работает,

Давным-давно я запускал «выборку» для PHP, когда мне нужно было заполнить объект.Должен ли я вернуться к этому?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Используя советы и рекомендации @ Encrypt0r, я заработал:

public void GetCustomer() {
            using (SqlConnection connection = new SqlConnection(Helper.CnnVal("DataConnection"))) {
                SqlCommand command = new SqlCommand(Helper.Procedure("Customer"), connection);

                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@Action", "Retrieve");
                command.Parameters.AddWithValue("@name", this.customer_name);

                connection.Open();

                using (var reader = command.ExecuteReader()) {
                    while (reader.Read()) {
                        this.tbl_id = (int)reader["tbl_id"];
                        this.customer_name = (string)reader["customer_name"];
                        this.customer_id = reader.GetInt32(customer_id);
                        this.customer_address = (string)reader["customer_address"];
                        this.customer_city = (string)reader["customer_city"];
                        this.customer_state = (string)reader["customer_state"];
                        this.customer_zip = reader.GetInt32(customer_zip);
                    }
                }
0 голосов
/ 19 октября 2018

Вам нужно выполнить SqlReader по команде, Примерно так:

using (var connection = new SqlConnection("Connection"))
using (var command = new SqlCommand("Retrieve", connection))
{
    command.CommandType = System.Data.CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Action", "Retrieve");
    command.Parameters.AddWithValue("@name", this.customer_Name);

    connection.Open();

    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var item = new YourClass();
            // You can use GetX() methods to get the value of the fields
            item.Name = reader.GetString("name");
            // You can also access the fields by using bracket notation
            item.Age = (int)reader["age"];

            // Be careful of nullable fields though!
        }
    }
}
...