我正在查看我的代码,如果连接的用户具有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();
}
}
答案 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
}
}