从数据库查询多条数据

sdfgrtyu 2015-01-23 06:26:51
数据库表是这样的:表A有个字段number,根据number查询表B(附件的相关信息)的信息,
我有一个表单页面,有一个附件,我用HyperLink做的。现在的问题是:我的方法只能返回一个实体类,如果有两个附件,我该怎么做?
...全文
564 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调之人 2015-01-27
  • 打赏
  • 举报
回复
引用 20 楼 yenange 的回复:
public List<TC_TaxiInfo> GetModelBySql(Guid TaxiID)
{
    List<TC_TaxiInfo> list = new List<TC_TaxiInfo>();
    StringBuilder sbSql = new StringBuilder();
    sbSql.Append(@"SELECT TaxiID,TaxiBrandNumdbo.Rpt_GetDictionaryNameSql(CarModels,'TaxiType') CarModels, CMDS_PrivateDictionaryItem.name as TaxiUnit,CertificateTime,ManufactureDate,YearCarefulTime,CertificatePeriod,SeatingNumber,Attach,Picture,Remark,TC_Taxi.OrganiseUnitID,TC_Taxi.CreatedBy,TC_Taxi.CreatedDate,TC_Taxi.ModifiedBy,TC_Taxi.ModifiedDate 
            FROM [TC_Taxi]
            Left join  CMDS_Annex on CMDS_Annex.RunningNo=TC_Taxi.Attach
                                WHERE TaxiID=@TaxiID ");


    int n = 0;
    SqlParameter[] parameters = {
            new SqlParameter("@TaxiID", SqlDbType.UniqueIdentifier)};
    parameters[n++].Value = TaxiID;

    
    //执行查询    
    using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.LocalTrafficConnectionString, CommandType.Text, sbSql.ToString(), parameters))
    {
        while (rdr.Read())
        {
            TC_TaxiInfo model = new TC_TaxiInfo();
            model.TaxiID = (new Guid(rdr[TC_TaxiInfo.TAXIID_FIELD].ToString()));
            model.TaxiBrandNum = rdr[TC_TaxiInfo.TAXIBRANDNUM_FIELD].ToString();
            model.TaxiCertificate = rdr[TC_TaxiInfo.TAXICERTIFICATE_FIELD].ToString();
            model.Name = rdr[TC_TaxiInfo.NAME_FIELD].ToString();

            list.Add(model);
        }
    }
    return list;
}
代码类似上面了…… 楼主是学生么?
正解,楼主是没有循环读取数据,只是取了一条,当然不行了
zujinsheng 2015-01-26
  • 打赏
  • 举报
回复
问题应该出在你的sql语句上, 你先把sql 在数据库里执行一下, 如果得不到你想要的结果就是sql语句没写对。 不要是因为使用了左连接。
sdfgrtyu 2015-01-26
  • 打赏
  • 举报
回复
引用 17 楼 fcylovehbb 的回复:
一看问题就知道楼主用的mvc,你的model对象里面的额附件子对象用list不就可以了
用的三层,那我的方法的怎么改?
fcylovehbb 2015-01-26
  • 打赏
  • 举报
回复
一看问题就知道楼主用的mvc,你的model对象里面的额附件子对象用list不就可以了
吉普赛的歌 2015-01-26
  • 打赏
  • 举报
回复
public List<TC_TaxiInfo> GetModelBySql(Guid TaxiID)
{
    List<TC_TaxiInfo> list = new List<TC_TaxiInfo>();
    StringBuilder sbSql = new StringBuilder();
    sbSql.Append(@"SELECT TaxiID,TaxiBrandNumdbo.Rpt_GetDictionaryNameSql(CarModels,'TaxiType') CarModels, CMDS_PrivateDictionaryItem.name as TaxiUnit,CertificateTime,ManufactureDate,YearCarefulTime,CertificatePeriod,SeatingNumber,Attach,Picture,Remark,TC_Taxi.OrganiseUnitID,TC_Taxi.CreatedBy,TC_Taxi.CreatedDate,TC_Taxi.ModifiedBy,TC_Taxi.ModifiedDate 
            FROM [TC_Taxi]
            Left join  CMDS_Annex on CMDS_Annex.RunningNo=TC_Taxi.Attach
                                WHERE TaxiID=@TaxiID ");


    int n = 0;
    SqlParameter[] parameters = {
            new SqlParameter("@TaxiID", SqlDbType.UniqueIdentifier)};
    parameters[n++].Value = TaxiID;

    
    //执行查询    
    using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.LocalTrafficConnectionString, CommandType.Text, sbSql.ToString(), parameters))
    {
        while (rdr.Read())
        {
            TC_TaxiInfo model = new TC_TaxiInfo();
            model.TaxiID = (new Guid(rdr[TC_TaxiInfo.TAXIID_FIELD].ToString()));
            model.TaxiBrandNum = rdr[TC_TaxiInfo.TAXIBRANDNUM_FIELD].ToString();
            model.TaxiCertificate = rdr[TC_TaxiInfo.TAXICERTIFICATE_FIELD].ToString();
            model.Name = rdr[TC_TaxiInfo.NAME_FIELD].ToString();

            list.Add(model);
        }
    }
    return list;
}
代码类似上面了…… 楼主是学生么?
於黾 2015-01-26
  • 打赏
  • 举报
回复
你应该将邮件和附件做成主从表,主外键关联
sdfgrtyu 2015-01-26
  • 打赏
  • 举报
回复
SELECT TaxiID,TaxiBrandNum,CMDS_Annex.name as AttachName,url,TaxiCertificate,TC_Taxi.Name,CertificateTime,ManufactureDate,YearCarefulTime,CertificatePeriod,SeatingNumber,Attach,Picture,Remark,TC_Taxi.OrganiseUnitID,TC_Taxi.CreatedBy,TC_Taxi.CreatedDate,TC_Taxi.ModifiedBy,TC_Taxi.ModifiedDate 
FROM [TC_Taxi]
Left join CMDS_Annex on CMDS_Annex.RunningNo=TC_Taxi.Attach

WHERE TaxiID='875a3b50-7380-4c2c-99ac-0a066b96b4bf'


这个是sql语句和运行结果
wangjia1991 2015-01-26
  • 打赏
  • 举报
回复
return model; 把model放在一个List<model类型>的集合里面,list.add(model) 最后return 这个list就可以了。记得把方法类型改成List<model类型>。根据这个思路,应该可以写出来
sdfgrtyu 2015-01-25
  • 打赏
  • 举报
回复
或者对于附件的查询能不能用linq,用linq怎么写?
sdfgrtyu 2015-01-25
  • 打赏
  • 举报
回复
引用 11 楼 yenange 的回复:
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Panel ID="pnlContainer" runat="server">
        </asp:Panel>
    </form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack) 
            {
                List<Attachment> list = GetList();
                if (list != null && list.Count > 0) 
                {
                    foreach (Attachment item in list) 
                    {
                        //加入链接
                        HyperLink link = new HyperLink();
                        link.Text = item.Name;
                        link.NavigateUrl = item.Url;
                        this.pnlContainer.Controls.Add(link);
                        //加一个回车, 没有别的用意, 只为分开两者, 更显眼
                        Literal lt = new Literal();
                        lt.Text = "<br/>";
                        this.pnlContainer.Controls.Add(lt);
                    }
                }
            }
        }

        public List<Attachment> GetList() 
        {
            List<Attachment> list = new List<Attachment>()
            {
                new Attachment(){ Name="百度", Url="http://www.baidu.com" },
                new Attachment(){ Name="新浪", Url="http://www.sina.com" }
            };

            return list;
        }
    }

    public class Attachment 
    {
        public string Name { get; set; }

        public string Url { get; set; }
    }
}
亲测可用。 效果图: 如有空,帮我投个票: http://vote.blog.csdn.net/blogstar2014/details?username=yenange#content
投票已经结束
public TC_TaxiInfo GetModelBySql(Guid TaxiID)
        {
            StringBuilder sbSql = new StringBuilder();
            sbSql.Append(@"SELECT TaxiID,TaxiBrandNumdbo.Rpt_GetDictionaryNameSql(CarModels,'TaxiType') CarModels, CMDS_PrivateDictionaryItem.name as TaxiUnit,CertificateTime,ManufactureDate,YearCarefulTime,CertificatePeriod,SeatingNumber,Attach,Picture,Remark,TC_Taxi.OrganiseUnitID,TC_Taxi.CreatedBy,TC_Taxi.CreatedDate,TC_Taxi.ModifiedBy,TC_Taxi.ModifiedDate 
                    FROM [TC_Taxi]
                    Left join  CMDS_Annex on CMDS_Annex.RunningNo=TC_Taxi.Attach
                                        WHERE TaxiID=@TaxiID ");
                               
 
            int n = 0;
            SqlParameter[] parameters = {
                    new SqlParameter("@TaxiID", SqlDbType.UniqueIdentifier)};
            parameters[n++].Value = TaxiID;
 
            TC_TaxiInfo model = null;
            //执行查询    
            using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.LocalTrafficConnectionString, CommandType.Text, sbSql.ToString(), parameters))
            {
                model = new TC_TaxiInfo();
                if (rdr.Read())
                {
                    model.TaxiID = (new Guid(rdr[TC_TaxiInfo.TAXIID_FIELD].ToString()));
                    model.TaxiBrandNum = rdr[TC_TaxiInfo.TAXIBRANDNUM_FIELD].ToString();
                    model.TaxiCertificate = rdr[TC_TaxiInfo.TAXICERTIFICATE_FIELD].ToString();
                    model.Name = rdr[TC_TaxiInfo.NAME_FIELD].ToString();
                     
                }
                        }
            return model;
        }
请问我这段代码怎么改?我从A表查出所有信息,其中有字段RunningNo,然后我根据RunningNo查询Attachmentde的信息,但是我的方法只能返回一个实体类,就是除了附件的字段为两个,sql语句应该怎么改,实体类怎么改?
吉普赛的歌 2015-01-25
  • 打赏
  • 举报
回复
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Panel ID="pnlContainer" runat="server">
</asp:Panel>
</form>
</body>
</html>


Default.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
List<Attachment> list = GetList();
if (list != null && list.Count > 0)
{
foreach (Attachment item in list)
{
//加入链接
HyperLink link = new HyperLink();
link.Text = item.Name;
link.NavigateUrl = item.Url;
this.pnlContainer.Controls.Add(link);
//加一个回车, 没有别的用意, 只为分开两者, 更显眼
Literal lt = new Literal();
lt.Text = "<br/>";
this.pnlContainer.Controls.Add(lt);
}
}
}
}

public List<Attachment> GetList()
{
List<Attachment> list = new List<Attachment>()
{
new Attachment(){ Name="百度", Url="http://www.baidu.com" },
new Attachment(){ Name="新浪", Url="http://www.sina.com" }
};

return list;
}
}

public class Attachment
{
public string Name { get; set; }

public string Url { get; set; }
}
}


亲测可用。
效果图:


如有空,帮我投个票: http://vote.blog.csdn.net/blogstar2014/details?username=yenange#content
sdfgrtyu 2015-01-24
  • 打赏
  • 举报
回复
引用 8 楼 hou306010849 的回复:
如果是根据用户ID 上传的附件,肯定要根据这个ID的啊,不可能用户上传附件,上传两个,查询的时候只查询到一个, 你设计的不合理啊!
有两个在另一张表里,我的方法只能查到一个,根据另外一个字段能查到
sdfgrtyu 2015-01-24
  • 打赏
  • 举报
回复
引用 7 楼 wind_cloud2011 的回复:
你的查询语句是怎么样的?
 public TC_TaxiInfo GetModelBySql(Guid TaxiID)
        {
            StringBuilder sbSql = new StringBuilder();
            sbSql.Append(@"SELECT TaxiID,TaxiBrandNumdbo.Rpt_GetDictionaryNameSql(CarModels,'TaxiType') CarModels, CMDS_PrivateDictionaryItem.name as TaxiUnit,CertificateTime,ManufactureDate,YearCarefulTime,CertificatePeriod,SeatingNumber,Attach,Picture,Remark,TC_Taxi.OrganiseUnitID,TC_Taxi.CreatedBy,TC_Taxi.CreatedDate,TC_Taxi.ModifiedBy,TC_Taxi.ModifiedDate 
					FROM [TC_Taxi]
                    Left join  CMDS_Annex on CMDS_Annex.RunningNo=TC_Taxi.Attach
                    					WHERE TaxiID=@TaxiID ");
                              

            int n = 0;
            SqlParameter[] parameters = {
					new SqlParameter("@TaxiID", SqlDbType.UniqueIdentifier)};
            parameters[n++].Value = TaxiID;

            TC_TaxiInfo model = null;
            //执行查询	
            using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.LocalTrafficConnectionString, CommandType.Text, sbSql.ToString(), parameters))
            {
                model = new TC_TaxiInfo();
                if (rdr.Read())
                {
                    model.TaxiID = (new Guid(rdr[TC_TaxiInfo.TAXIID_FIELD].ToString()));
                    model.TaxiBrandNum = rdr[TC_TaxiInfo.TAXIBRANDNUM_FIELD].ToString();
                    model.TaxiCertificate = rdr[TC_TaxiInfo.TAXICERTIFICATE_FIELD].ToString();
                    model.Name = rdr[TC_TaxiInfo.NAME_FIELD].ToString();
                    
                }
                        }
            return model;
        }
Im_Sorry 2015-01-24
  • 打赏
  • 举报
回复
如果是根据用户ID 上传的附件,肯定要根据这个ID的啊,不可能用户上传附件,上传两个,查询的时候只查询到一个, 你设计的不合理啊!
wind_cloud2011 2015-01-24
  • 打赏
  • 举报
回复
你的查询语句是怎么样的?
我本良人 2015-01-23
  • 打赏
  • 举报
回复
你的同一关联下的两个路径之间总是有关联关系的,不可能差不多其他的啊,大哥,我觉得你还是把你的代码贴出来,大家就都懂了,当然还有你的数据关系
sdfgrtyu 2015-01-23
  • 打赏
  • 举报
回复
引用 3 楼 yangmingxing980 的回复:
一般下载附件,就是在在你的点击事件里调用下载函数,代入你的路径就OK了,如果有多个附件,你就循环代入路径就好了啊, 反正你的意思表述不清楚,如果你是说的SQL查询的结果只有一个的话,那就是你自己写的SQL语句有问题,既然你要关联到多个附件,肯定查询出来会有多个附件的路径,如果每个路径是分开存的,你只需要单独代入下载函数就好了,如果你的路径是存在一个字段中,比如 【123.doc|abc.doc|567.txt|efg.xls】这种格式的话,你需要先把它按“|”拆分开,再分别代入下载函数就好了。 说实话,写了这么多,其实还是不知道你问的到底是什么,
我的问题是这样的:我用hyperlink从数据库查到附件路径,但是我的方法只能查到一个实体类,只能查到一个路径,现在有两个附件,我该怎么办?
我本良人 2015-01-23
  • 打赏
  • 举报
回复
一般下载附件,就是在在你的点击事件里调用下载函数,代入你的路径就OK了,如果有多个附件,你就循环代入路径就好了啊, 反正你的意思表述不清楚,如果你是说的SQL查询的结果只有一个的话,那就是你自己写的SQL语句有问题,既然你要关联到多个附件,肯定查询出来会有多个附件的路径,如果每个路径是分开存的,你只需要单独代入下载函数就好了,如果你的路径是存在一个字段中,比如 【123.doc|abc.doc|567.txt|efg.xls】这种格式的话,你需要先把它按“|”拆分开,再分别代入下载函数就好了。 说实话,写了这么多,其实还是不知道你问的到底是什么,
sdfgrtyu 2015-01-23
  • 打赏
  • 举报
回复
引用 1 楼 xhbmj 的回复:
说实话我没看懂你说的问题是啥 请描述清楚你的问题
有个页面,页面上有个附件,点击附件链接到相应的地址,我的方法是根据Id查询数据,用的连接查询,这个方法只能返回一个实体类,现在有两个附件,我该怎么办?
无爱大叔 2015-01-23
  • 打赏
  • 举报
回复
说实话我没看懂你说的问题是啥 请描述清楚你的问题
MySQL 教程MySQL 是流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:1.数据以表格的形式出现2.每行为各种记录名称3.每列为记录名称所对应的数据域4.许多的行和列组成一张表单5.若干的表单组成databaseRDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:数据库: 数据库是一些关联表的集合。数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。外键:外键用于关联两个表。复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称;列(col): 具有相同数据类型的数据的集合;行(row): 每一行用来描述某条记录的具体信息;值(value): 行的具体信息, 每个值必须与该列的数据类型相同;键(key): 键的值在当前列中具有唯一性。MySQL数据库MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 是开源的,目前隶属于 Oracle 旗下产品。MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。MySQL 使用标准的 SQL 数据语言形式。MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。MySQL 对PHP有很好的支持,PHP 是目前流行的 Web 开发语言。MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。Redis 教程REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧