试图取消一个if语句

时间:2018-12-14 18:13:59

标签: c#

我正在查看我的代码,如果连接的用户具有SQL Server中所述的插入或更新权限。如果用户具有INSERT权限,则将禁用在datagridview的表中编辑先前保存的记录,并且仅启用添加新行。并且,如果用户同时具有INSERT或UPDATE权限,则用户可以编辑表中的任何记录。如果用户只有INSERT权限,则我的代码效果很好,但是如果他同时具有插入和更新功能,我不知道如何取消if循环。 这是我的CellBeginEdit代码:

 private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            string db2 = Text1;
            string user2 = Text2;
            string pass2 = Text3;
            string selected = this.ComboBox1.GetItemText(this.ComboBox1.SelectedItem);
            using (SqlConnection SqlConn = new SqlConnection(@"Data Source=server;Initial Catalog =" + db2 + "; User ID =" + user2 + "; Password =" + pass2 + ""))
            {
                SqlConn.Open();
                SqlCommand SqlCmd2 = new SqlCommand();
                SqlCommand SqlCmd3 = new SqlCommand();
                SqlCmd2.Connection = SqlConn;
                SqlCmd3.Connection = SqlConn;
                SqlCmd2.CommandText = "SELECT isnull(has_perms_by_name('" + db2 + ".dbo." + selected + "', 'OBJECT', 'INSERT'), 0)";
                SqlCmd3.CommandText = "SELECT isnull(has_perms_by_name('" + db2 + ".dbo." + selected + "', 'OBJECT', 'UPDATE'), 0)";
                Int32 number2 = (Int32)SqlCmd2.ExecuteScalar();
                Int32 number3 = (Int32)SqlCmd3.ExecuteScalar();
                if (number2 == 1)
                {
                    if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
                    {
                        if (e.RowIndex < dataGridView1.NewRowIndex)
                        {
                            if (AddedRowIndex != e.RowIndex)
                            {
                                MessageBox.Show("Not allowed to edit previous records!");
                                e.Cancel = true;
                            }
                        }
                    }
                }
                else if ((number2 == 1) && (number3 == 1))
                {
                    //enable editing of all records in table
                }
                SqlConn.Close();
            }
        }

1 个答案:

答案 0 :(得分:2)

问题似乎是您首先要检查更简单的条件,而插入和更新都将是true,这意味着从未检查过else if条件,并且您的启用更新代码永远不会运行。

相反,您应该首先检查复合条件,如果不正确,请然后检查单个条件。

例如:

if (number2 == 1 && number3 == 1)
{
    // enable editing of all records
}
else if (number2 == 1)
{
    // enable insert only
}

或其他选择,因为他们有共同的条件:

if (number2 == 1)
{
    if (number3 == 1)
    {
        // enable editing of all records
    }
    else
    {
        // enable insert only
    }
}