我正在编辑我的代码隐藏文件,在数据库中我将这4个表链接在一起:
Table :Compannies
--------------------
companyId
--------------------
companyName
--------------------
和
Table :UserCompany
--------------------
userId
--------------------
companyId
--------------------
和
Table :Users
--------------------
UserId
--------------------
Email
--------------------
和
Table :Choice
--------------------
Email
--------------------
Choice
--------------------
现在,我想检查所有companyName,如果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();
}
我不知道如何比较从表中提取的值,我的代码中是否有语法或逻辑错误?
答案 0 :(得分:0)
尝试使用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
}
}