【问题标题】:Get the list of items from the database that is separated with comma for an each record in MVC?从数据库中获取用逗号分隔的 MVC 中每条记录的项目列表?
【发布时间】:2018-11-23 10:23:03
【问题描述】:

要通过列表框(多选)存储到数据库中,请参考以下链接

https://www.aspsnippets.com/Articles/ASPNet-MVC-Get-ListBox-Selected-Text-and-Selected-Value-in-Controller.aspx

这里这个链接实际上提醒了列表框中列出的项目的消息框。

正如上面提到的链接......我存储了通过多个项目的逗号分隔的水果数据,例如
var items = string.Join(",", fruits.FruitsId.ToArray());

下面的输出是

ID |水果 |手机号
1 | 1,5,4 | 9876543210
2 | 2,3,8 | 9876542103

但现在我实际上需要根据在文本框中输入的 mobileno 从特定记录的数据库中获取数据,并通过 ado.net 将表中的 fruitslist 记录...

这就是我使用 ado.net 将数据插入水果表的方式

   public void Addfruits(Fruits bfitems)
   {
            try   
            {
             connection(); 
            var items = string.Join(",", bfitems.FruitsId.ToArray());
            string insertText = "insert into FruitItems(Items,Mobileno) 
                VALUES (@Items,@Mobileno)";
            MySqlCommand command = new MySqlCommand(insertText, con);
            command.Parameters.AddWithValue("@Items", items);
            command.Parameters.AddWithValue("@Mobileno", bfitems.Mobileno);
            if (insertText != null)
            {
                con.Open();
                command.ExecuteNonQuery();
            }

        }
        catch (Exception ex)
        {

        }
        finally
        {
            con.Close();
        }
    }

获取记录....

     private static List<SelectListItem> GetFruits(Fruits bf)
    {
        List<SelectListItem> items = new List<SelectListItem>();
        string constr = 
        ConfigurationManager.ConnectionStrings["orders"].ConnectionString;
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            string query = " SELECT * FROM FruitItems where 
            Mobileno=@Mobileno";
            MySqlCommand cmd = new MySqlCommand(query);
            cmd.Parameters.AddWithValue("@Mobileno", bf.Mobileno);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();

        }

        return items;
    }

【问题讨论】:

  • 你试过 SQL WHERE 子句吗?
  • 是的,其中 mobileno='9876543210' 但我没有得到项目列表......特定记录
  • @Shyju 你能发布你已经尝试获取记录的内容吗?
  • 我不确定为 fetch 编写的代码是否正确..请建议我找到解决方案

标签: c# mysql asp.net-mvc ado.net


【解决方案1】:

ExecuteNonQuery 执行您的查询并返回受查询影响的记录数(插入/更新了多少行)。如果你想从你的表中获取数据,你应该使用ExecuteReader 方法,它返回一个SqlDataReader

private static List<SelectListItem> GetFruits(Fruits bf)
{
    var items = new List<SelectListItem>();
    string constr = "Your connection string here";
    using (var con = new SqlConnection(constr))
    {
        var query = " SELECT ID, Fruits FROM FruitItems where Mobileno=@Mobileno";
        using (var cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@Mobileno", bf.Mobileno);
            con.Open();
            using (var reader = cmd.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        var item = new SelectListItem();
                        item.Value = reader.GetInt32(reader.GetOrdinal("Id")).ToString();
                        item.Text = reader.GetString(reader.GetOrdinal("Fruits"));
                        items.Add(item);
                    }
                }
            }
        }
    }

    return items;
}

您存储在 Fruits 属性中的值是逗号分隔的 Id 值,例如 1,5,4。这就是您的 SelectListItem 的 Text 属性将拥有的。您可能需要考虑规范化您的表以将 1 个 FruitId 值存储在单个列(和记录)中。

我在从 SqlDataReader 读取之前排除了 null 检查,并假设您的 ID 列不是 NULL 类型。如果是可空类型,可以根据需要使用IsDBNull方法

if (!reader.IsDBNull(reader.GetOrdinal("Id")))
{
    item.Value = reader.GetInt32(reader.GetOrdinal("Id")).ToString();
}

【讨论】:

  • 如何在视图中获取表格格式的记录?
  • 使用 HTML 表格来渲染表格。在那种情况下,你为什么要在你的代码中使用SelectListItem?创建一个类来表示您的数据并返回它。
  • 为什么会出现这个错误......传入字典的模型项的类型是'System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]' ,但此字典需要“Orders.Models.Fruits”类型的模型项。
  • 因为您的视图被强类型化为 Fruit 对象列表并且它期望这样。但是您的操作方法正在尝试传递 SelectListItem 对象的列表。传递正确的数据
【解决方案2】:
@model Orders.Models.Fruits
@using (Html.BeginForm())  
{
@Html.AntiForgeryToken()


<div class="form-horizontal">       
    <h2>Fruits</h2>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })


    <div class="form-group">

        <div class="col-md-10">
            @Html.EditorFor(model => model.Mobileno, new { htmlAttributes = new { @class = "form-control", @id = "txtmobno", @Placeholder = "Mobile" } })
            @Html.ValidationMessageFor(model => model.Mobileno, "", new { @class = "text-danger" })
        </div>
    </div>

    <table cellpadding="0" cellspacing="0">
            <tr>
                <th>ItemsID</th>
                <th>Items</th>
            </tr>
            @foreach (var items in Model)
            {
                <tr>
                    <td>@items.ItemsId</td>
                    <td>@items.Items</td>
                </tr>
            }
        </table>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Print" class="btn btn-default" />
        </div>
    </div>

</div>

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多