我必须显示员工列表,但列表的显示取决于登录用户的状态。如果我是你的主管,我可能会在我的名单中看到你。
但是我想在选择你显示你之前检查你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
答案 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不存在于数据库中,查询将永远不会通过异常。请再次重新检查,可能是你遗漏了什么。