【发布时间】:2012-11-18 20:03:44
【问题描述】:
我有一个 Windows 窗体,我要求用户在 textbox1 中输入 pcname,然后尝试使用SqlDataReader 从数据库中读取以获取 pc ipaddress,然后将 pc 驱动器映射到我的本地 pc。
但由于某种原因,当我在 SQL 参数中使用文本框时,它不起作用。但是当我用实际的 pcname 替换 textbox1.text 时,它工作正常。希望有人可以帮助我找出参数无法正常工作的原因。
这是我的代码:
public void button1_Click(object sender, EventArgs e)
{
string results = "";
using (SqlConnection cs = new SqlConnection(@"***removed connection string***"))
{
cs.Open();
string query = "select stationipaddress from station where stationname = @StationName";
using (SqlCommand cmd = new SqlCommand(query, cs))
{
// Add the parameter and set its value --
cmd.Parameters.AddWithValue("@StationName", textBox1.Text);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
label3.Text = dr.GetSqlValue(0).ToString();
results = dr.GetValue(0).ToString();
MessageBox.Show(dr.GetValue(0).ToString());
MessageBox.Show(results);
}
string myvar = string.Format(@"use S: \\" + label3.Text + "\\c$\logs 0A36303 /user:admin", label3.Text);
Process p = new Process();
p.StartInfo.FileName = "net.exe";
p.StartInfo.Arguments = (myvar);
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
【问题讨论】:
-
请学习正确格式化您的问题。这表明花费了几分钟的努力。
-
去掉“@StationName”周围的单引号。有了它们,它就变成了字符串文字 @StationName 而不是参数。
-
除了单引号之外,正如 Conrad Frix 所说,您可以用简单的 'SqlDataReader reader = cmd.ExecuteReader()' 替换
using(SqlDataReader)以摆脱内部使用。 -
这表明它没有返回任何行。
-
否,因为如果没有返回任何行,
dr.Read()将永远不会返回true,并且您的代码将永远不会进入while循环。
标签: c# sql parameters parameter-passing sqldatareader