Загрузка данных в MVC при нажатии кнопки - PullRequest
0 голосов
/ 26 марта 2020

На моем главном экране TextBox и Button. Мне нужно, чтобы когда пользователь вводил число, например: 111111, и нажимал button, это отображало данные, связанные с этим номером. Чтобы было понятно, клиент должен ввести свой заголовок (111111) в TextBox и нажать button; нажатие на нее должно отобразить данные.

Это textbox и button:

<form id="form">
        <div>
            @using (Html.BeginForm())
            {
                <p>
                    Título: @Html.TextBox("buscar")
                    <input type="submit" value="Filtrar" /><br />
                    <input type="button" value="Imprimir" onclick="window.print()" />
                </p>
            }
        </div>
        <div>
            <table border="1">
                @foreach (var item in Model)
                {
                <tr>
                    <th scope="row" abbr="Suscriptor">Suscriptor: </th>
                    <td>

                        <b>@Html.DisplayFor(modelItem => item.Apellido) @Html.DisplayFor(modelItem => item.Nombre)</b>
                    </td>
                    <td>Título: @Html.DisplayFor(modelItem => item.Titulo)</td>
                    <td>
                        @Html.ActionLink("Ver detalles en PDF", "PrintPartialViewToPdf", new { id = item.Titulo })
                    </td>
                </tr>
                }
            </table>
        </div>
    </form>

Это код с запросом для отображения данных: CODE ОБНОВЛЕНО

public List<Cuotas> cargarDatos(double? tit)
        {
            List<Cuotas> salida = new List<Cuotas>();
            using (SqlConnection conn = new SqlConnection("string"))
            {
                conn.Open();
                SqlCommand comand = new SqlCommand("SELECT titulo, apellido +', '+nombre,cuotas FROM datosSuscripto WHERE titulo = @tit", conn);
                var param = comand.Parameters.Add(new SqlParameter("@tit", SqlDbType.Float));
                param.Value = tit;
                using (SqlDataReader dr = comand.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        double titulo = Convert.ToDouble(dr.GetDouble(0));
                        string nombre = dr.GetString(1);
                        double cuota = Convert.ToDouble(dr.GetDouble(2));
                        Cuotas p = new Cuotas(titulo, nombre, cuota);
                        salida.Add(p);
                    }
                }
                conn.Close();
            }
            return salida;
}

Это код контроллера:

public ActionResult Index(double? consulta)
        {
            ConexionSQL cn = new ConexionSQL();
            return View(cn.cargarDatos(consulta));
        }

При компиляции я получаю следующую ошибку:

Incorrect syntax near '='//SOLVED

ОБНОВЛЕНИЕ НОВОЕ ОШИБКА:

System.Data.SqlClient.SqlException: 'The parameterized query '(@tit float)SELECT titulo, apellido +', '+nombre,cuotas FROM dat' expects the parameter '@tit', which was not supplied.'

Есть предложения? Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

SQL запросы всегда должны отображаться в виде отдельных литеральных строк в вашем исходном коде. Вы (почти) никогда не должны объединять значения в самом запросе, потому что это очень трудно сделать безопасным способом от SQL атак внедрения.

Итак, что-то вроде этого, возможно:

    public List<Cuotas> cargarDatos(double? tit)
    {
        List<Cuotas> salida = new List<Cuotas>();
        using (SqlConnection conn = new SqlConnection("string"))
        {
            conn.Open();
            SqlCommand comand = new SqlCommand("SELECT titulo, apellido,nombre, cuotas FROM datosSuscripto WHERE titulo = @tit", conn);
            var param = comand.Parameters.Add(new SqlParameter("@tit", SqlDbType.Float));
            param.Value = tit;
            using (SqlDataReader dr = comand.ExecuteReader())
            {
                while (dr.Read())
                {
                    double titulo = dr.GetDouble(0);
                    //string apellido = dr.GetString(1);
                    string nombre = dr.GetString(2);
                    double cuota = dr.GetDouble(3);
                    Cuotas p = new Cuotas(titulo, nombre, cuota);
                    salida.Add(p);
                }
            }
            conn.Close();
        }
        return salida;
    }
1 голос
/ 26 марта 2020

В моем случае я столкнулся с этим типом ошибки по следующим причинам:

Если тип команды не был указан, даже если все значения параметров верны:

cmd.CommandType = System.Data.CommandType.StoredProcedure;

Если некоторые параметры имеют значение null, тогда объекты SqlCommand игнорируют любой объект SqlParameter в своей коллекции Parameters со значением null. Задание значения по умолчанию для каждого параметра в хранимых процедурах Решает эту проблему:

@Parameter int to @Parameter int = NULL 

В некоторых случаях назначение DBNull.Value вместо Null, где значение, равное SQL NULL, может решить проблему.

В тех случаях, когда вы забыли указать значение по умолчанию для выходного параметра хранимой процедуры, вы столкнетесь с этой ошибкой.

@example int = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...