【问题标题】:Compare value from tables in asp.net比较asp.net中表的值
【发布时间】:2014-05-15 07:14:46
【问题描述】:

我正在编辑我的代码隐藏文件,在数据库中我将​​这 4 个表链接在一起:

Table :Compannies
--------------------
companyId
--------------------
companyName
--------------------

还有:

Table :UserCompany
--------------------
userId
--------------------
companyId
--------------------

还有:

Table :Users
--------------------
UserId
--------------------
Email
--------------------

还有:

Table :Choice
--------------------
Email
--------------------
Choice
--------------------

现在,我想检查所有公司名称,如果选择相应 =“YES”,然后执行操作。

string sqlIns = "SELECT companyName FROM Companies WHERE companyId IN
                  (SELECT companyId FROM UserCompany WHERE userId IN 
                   (SELECT UserId FROM Users WHERE Email IN 
                    (SELECT Email FROM Choice WHERE Choice='YES')"

SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
                    conn.Open();
try
{
    SqlCommand cmdIns = new SqlCommand(sqlIns, conn);    
    if (cmdIns.Parameters.compareValue("currentCompanyName", companyName))//how to compare?
    {
         //action here
    }
    else
    {
         //another action
    }

    cmdIns.ExecuteNonQuery();

    cmdIns.Parameters.Clear();
    cmdIns.Dispose();
    cmdIns = null;
}
catch (Exception ex)
{
      throw new Exception(ex.ToString(), ex);
}
finally
{
      conn.Close();
}

我不知道如何比较从表中提取的值,我的代码中是否有任何语法或逻辑错误?

【问题讨论】:

  • 但是你的SqlCommand中没有定义参数?
  • 什么是cmdIns.Parameters.compareValue()方法?我不认为它存在。你的问题不清楚。
  • 您似乎想将结果与其他公司名称进行比较?
  • 是的,没错!我只想获得“选择”=“是”的公司名称
  • 您好 Zeeshan,“cmdIns.Parameters.compareValue()”可能不存在,我只是不知道如何使条件出现。

标签: c# asp.net


【解决方案1】:

尝试使用inner-join 代替嵌套查询:

这里是更改查询:

SELECT cn.companyName from companies cn 
INNER JOIN UserCompany uc ON uc.companyid = cn.companyid 
INNER JOIN Users u ON u.userId = uc.userId
INNER JOIN Choice c ON c.Email = u.Email And c.Choice = @Choice
WHERE cn.CompanyName = @CompanyName;

示例代码如下:

string commandText = @"SELECT cn.companyId, cn.companyName from companies cn 
                       INNER JOIN UserCompany uc ON uc.companyid = cn.companyid 
                       INNER JOIN Users u ON u.userId = uc.userId
                       INNER JOIN Choice c ON c.Email = u.Email And c.Choice = @Choice
                       WHERE cn.CompanyName = @CompanyName;";

string connectionString = ConfigurationSettings.AppSettings["connectionString"];

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);        

    command.Parameters.AddWithValue("@Choice", "YES");
    command.Parameters.AddWithValue("@CompanyName", "currentCompanyName");

    try
    {
        connection.Open();            

        datagridview.DataSource = command.ExecuteReader();
        datagridview.DataBind();

    }
    catch (Exception ex)
    {
       //handle exception
    }
}

【讨论】:

  • 我如何使用该内部联合来获取 Choice = YES 的所有 companyId ?
  • 您可以在查询中同时使用SELECT cn.companyId, cn.companyName 或其中任何一个。试试看
  • 我的意思是在上面的代码中,我应该将 where cn.CompanyName=@CompanyName 更改为 where c.Choice = 'YES' 吗?它没有正确返回。
  • 不,您不必更改查询。对于以@ 符号开头的变量,您在参数中提供值。请参阅command.Parameters.AddWithValue,在这里你给@参数赋值。
  • 对不起,我在这里搞糊涂了。所以在 SqlCommand command = new SqlCommand(commandText, connection); 之后和 command.Parameters.AddWithValue("@Choice", "YES");我能得到什么。看起来它将向表选择添加值 YES。但我在这里需要的是获得 Choice="YES" 的 companyID,然后我将从我的另一个问题的数据网格中删除具有该 companyId 的行。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多