Treeview菜单由访问用户控制

时间:2015-02-26 09:08:20

标签: c# sql-server winforms treeview erp

我想获得sql server的特定值。 sql表现在如下所示。

**ID  /      PW   /    Depart**  
AAA   /    1234   /  1   
BBB   /    2345   /  2   
...      
**LKL** /  8765  /  **9**

例如, 当LKL用户访问Logon Form时, 我想获得离开代码9。

但它不起作用。 也许有些问题。但我再也找不到了。

这是我的代码。我会提出任何想法。

感谢。

private void MForm_Load(object sender, EventArgs e)
        {
            Logon lf = new Logon();
            String tx = lf.IDTBox.Text;
            String str = "Server = 102.201.10.17; Database = Dorw; UID = sa; Password = 565p89";
            String qur = "SELECT Depart FROM dbo.PW WHERE Name = @tx";
            SqlConnection con = new SqlConnection(str);
            SqlCommand cmd = new SqlCommand(qur, con);
            cmd.Parameters.AddWithValue("@tx", tx);
            con.Open();
            using(SqlDataReader reader = cmd.ExecuteReader())
            switch (reader.ToString())
            {
            case "0":
                break;

            case "1":
                treeView1.Nodes[1].Nodes[1].Remove();
                break;

            case "9":
                treeView1.Nodes[0].Nodes[0].Remove();
                treeView1.Nodes[1].Nodes[0].Remove();
                treeView1.Nodes[1].Nodes[1].Remove();
                break;
            }
       con.Close();
       }

1 个答案:

答案 0 :(得分:0)

SqlDataReader.ToString()不返回其内部数据。这将可能返回该类型的名称。

由于您的读者返回一列,您可以使用(string)reader[0]作为切换表达式。

但是如果想读你的读者,因为SqlDataReader的默认位置是之前第一条记录,你必须调用Read才能开始访问任何数据。

while(reader.Read())
{
   switch ((string)reader[0])
   {
      ...
   }
}

但老实说,我不明白你为什么把这些整数值作为一个字符。最好将它们保存为整数并将它们转换为程序中的字符串。

作为更好的选择,您可以使用ExecuteScalar返回第一列的第一行,看起来这正是您想要的。

string value = (string)cmd.ExecuteScalar();
switch(value)
{
   ...
}

还可以使用using语句来处置您的SqlConnectionSqlCommand,而不是手动调用.Close()方法。最佳做法是,不要使用AddWithValue方法。 可能会产生意想不到的惊人结果。请改用.Add() method