我想获得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();
}
答案 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
语句来处置您的SqlConnection
和SqlCommand
,而不是手动调用.Close()
方法。最佳做法是,不要使用AddWithValue
方法。 可能会产生意想不到的惊人结果。请改用.Add()
method。