2012-11-30 36 views
-5

Possible Duplicate:
SqlDataReader parameter not workingC#SQL查询和撇号的

我想从一个文本框在windows窗体应用程序中的SQL参数获得计算机名称。 当我输入如下参数时,它工作正常。

   string query = @"select stationipaddress from station where stationname = @Name"; 
       using (SqlCommand cmd = new SqlCommand(query, cs)) 
      { 


       SqlParameter param = new SqlParameter(); 
       param.ParameterName = "@Name"; 
       param.Value = "demo"; 
       cmd.Parameters.Add(param); 

       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 query = @"select stationipaddress from station where stationname = @Name"; 
      using (SqlCommand cmd = new SqlCommand(query, cs)) 
      { 


        SqlParameter param = new SqlParameter(); 
       param.ParameterName = "@Name"; 
       param.Value = textBox1.Text; 
       cmd.Parameters.Add(param); 

       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); 
        } 
+0

您看到的实际行为是什么? –

+2

更改密码 –

+0

上述错误/问题是什么? –

回答

1

我会建议您将所有的MessageBox操作移出,直到从数据库中检索到结果为止。将您的结果添加到强类型列表中,然后相应地显示消息。

0

尝试双引号像“” - >“约翰” - >“约翰“的”

+0

我这样做:''@StationName''和它说'@StationName'附近的语法不正确 – user1836162

+0

在您的问题中添加了整个异常。 – iefpw

0

你打电话后AddWithValue设定参数的DbType。这应该引用你的字符串。

cmd.Parameters["@StationName"].SqlDbType = SqlDbType.NVarChar; 

编辑:对不起,我的意思是指定SqlDbType

+0

当我这样做时,我得到以下错误:只有赋值,调用,增量,减量和新的对象表达式可以用作语句 – user1836162

+0

我已经更新了我的代码 – user1836162

0

你为什么不剥离出apostrophies即

cmd.Parameters.AddWithValue("@StationName", textBox1.Text.Replace("'","") 

如果工作站名称数据库字段值包含apostrophies那么你将有将您的SQL语句更改为:

select stationipaddress from station where replace(stationname,CHAR(39),'') = @StationName 
+0

以上查询所说的只是@StationName或'@StationName “? – user1836162

+0

我不明白原来的问题。撇号是数据库字段(Station.StationName),还是它们在文本框(textbox1.text)中,还是它们都在? – w0051977

+0

为了从db获得结果,它必须是这样的:where stationname ='stationname',这就是为什么我不能得到任何结果 – user1836162