在SELECTing之前检查是否存在行

时间:2015-11-20 09:12:19

标签: sql asp.net-mvc sql-server-2008

我必须显示员工列表,但列表的显示取决于登录用户的状态。如果我是你的主管,我可能会在我的名单中看到你。

但是我想在选择你显示你之前检查你LeaveRequest表中是否存在。

我尝试过以下操作但没有成功:

string sql = "IF EXISTS (SELECT 1 FROM LeaveRequest WHERE Login = '" + employee + "')";
       sql += " SELECT ActivityTypeId FROM LeaveRequest WHERE Login = '" + employee + "'";

否则:

IF EXISTS (SELECT 1 FROM LeaveRequest WHERE Login = 'chris')
  SELECT ActivityTypeId FROM LeaveRequest WHERE Login = 'chris'

让我们说在LeaveRequest表中没有chris,(没有Login ='chris'的行),它会给我一个

  

对象引用未设置为对象的实例。

异常细节不准确。

如果在表格中找不到用户,我怎么能简单地检查并跳过?

编辑:稍后我会出于安全原因使用参数化查询。

EDIT2:执行以下操作后出现错误以保存所选数据:

 string sql = "IF EXISTS (SELECT 1 FROM LeaveRequest WHERE Login = '" + employee + "')";
                sql += " SELECT ActivityTypeId FROM LeaveRequest WHERE Login = '" + employee + "'";

                mDB_DataAdapter = new SqlDataAdapter(sql, m_strConnectionString);
                mDB_DataAdapter.Fill(mDB_DataSet, "LeaveRequest");
                mDB_DataAdapter = null;

                string str = (mDB_DataSet.Tables["LeaveRequest"].Rows[0][0]).ToString(); // Right here

2 个答案:

答案 0 :(得分:1)

var rows = mDB_DataSet.Tables["LeaveRequest"].Rows;
var str = rows.Count > 0 ? rows[0]["ActivityTypeId"].ToString() : string.Empty;

并删除" IF EXISTS ..."来自sql

var sql = " SELECT ActivityTypeId FROM LeaveRequest WHERE Login = '" + employee + "'";

确保将其重新制作为参数化视图。

答案 1 :(得分:0)

这不是确切的答案,但我正在分享一个可能对您有帮助的非常好的建议或想法。

If it is a checks between 2 tables only So better try using join, union all etc between the tables.

当您共享查询时: -

  

SELECT 1 FROM LeaveRequest WHERE Login =' chris'

如果chris不存在于数据库中,查询将永远不会通过异常。请再次重新检查,可能是你遗漏了什么。