【问题标题】:SQL query only pulling data from one tableSQL 查询只从一张表中拉取数据
【发布时间】:2013-06-10 13:39:27
【问题描述】:

所以基本上,我有 2 张桌子,租户和所有者。我的存储过程是内部连接以在文本框中显示选择结果。但不幸的是,查询只是从所有者表中提取,而不是从两者中提取。尝试从租户表中显示该列不存在时出现错误。

@ID varchar(4)

SELECT        owner_table.ownerID AS ownID, tenant_table.tenantID, owner_table.apt_num AS aptNum, owner_table.first_name AS own_first, owner_table.last_name AS own_last, 
                     owner_table.address AS own_address, owner_table.city AS own_city, owner_table.state AS own_state, owner_table.zip AS own_zip, 
                     owner_table.phone AS own_phone, owner_table.phone_2 AS own_phone2, owner_table.notes AS own_notes, owner_table.last_update AS own_lastUpdate, 
                     tenant_table.ownerID AS ten_ownID, tenant_table.last_name, tenant_table.keyID, tenant_table.storage, tenant_table.phone, tenant_table.phone_2, tenant_table.notes,
                      tenant_table.complaints, tenant_table.lease_end, tenant_table.last_update, tenant_table.apt_status
FROM            owner_table INNER JOIN
                     tenant_table ON owner_table.ownerID = @ID AND tenant_table.tenantID = @ID
RETURN

试图从过程中获得结果的代码。

private void LoadInfo(string ID)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {                           

            SqlCommand Command = new SqlCommand();
            Command.Connection = connection;
            Command.CommandText = "MoreInfoData";
            Command.CommandType = CommandType.StoredProcedure;
            Command.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar, 4)).Value = ID;

            table = new DataTable();
            SqlDataAdapter MyAdapter = new SqlDataAdapter();
            MyAdapter.SelectCommand = Command;
            MyAdapter.Fill(table);

            if (table.Rows.Count > 0)
            {
                ten_name.Text = table.Rows[0]["last_name"].ToString();                       
            }

    }

【问题讨论】:

  • 不可能:您要么从两个表中获得结果,要么根本没有结果。并不是“查询仅从所有者表中提取”,而是您的数据访问代码很可能对租户列使用了错误的列名。你能显示错误的代码吗?您的查询可能没问题。
  • 错误我得到i.imgur.com/hwhbKIg.png 此外,两个表中都有 206 条记录。查看数据集的行时,它总共只有 206 行。显示它只拉到一个表中
  • 在调试器中查看数据表可以查看实际列名:stackoverflow.com/questions/1337084/…
  • JOIN 合并行水平,添加。如果您将一个表中的 206 行与另一个表中的 206 行连接起来,其中存在一对一匹配,那么您将仅获得 206 行。我在这里错过了什么吗?

标签: c# sql sql-server


【解决方案1】:

修改为使用列别名:

ten_name.Text = table.Rows[0]["own_last"].ToString(); 

【讨论】:

    【解决方案2】:

    您将字段名称更改为 own_last,所以它当然不存在。 owner_table.last_name AS own_last。所以你应该把你的代码改成

    ten_name.Text = table.Rows[0]["own_last"].ToString();

    【讨论】:

    • 可以发一下DataTable()吗?
    【解决方案3】:

    您是否尝试为tenant_table.last_name 添加别名?:

    SELECT .... tenant_table.last_name AS tenant_last_name
    

    然后:

    ten_name.Text = table.Rows[0]["tenant_last_name"].ToString(); 
    

    【讨论】:

      【解决方案4】:

      您能否运行它并查看输出中的内容,应该列出您正在检索的数据表的所有列名。

      if (table.Rows.Count > 0)
      {
          foreach (System.Data.DataColumn col in table.Columns)
          {
              System.Diagnostics.Debug.WriteLine(col.ColumnName);
          }
      }
      

      【讨论】:

        【解决方案5】:

        总而言之,不知何故,我当时保存到我的查询中的任何内容由于某种原因无法保存。毕竟这最终成为了问题。感谢大家的帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-20
          • 2017-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多