从数据库查询多条数据

sdfgrtyu 2015-01-23 06:26:51
数据库表是这样的:表A有个字段number,根据number查询表B(附件的相关信息)的信息,
我有一个表单页面,有一个附件,我用HyperLink做的。现在的问题是:我的方法只能返回一个实体类,如果有两个附件,我该怎么做?
...全文
577 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
说实话我没看懂你说的问题是啥 请描述清楚你的问题

62,243

社区成员

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

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

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

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