2016-07-29 75 views
0

我希望有基本上有一个文本框,要求一个ID,然后有一个按钮按下时发送ID的查询是这样的:C#ExecuteReader()错误。需要输出中的SQL查询文本框

str = "SELECT TOP 1 [Sender Name],[Subject] from [OLE DB Destination] WHERE [CHAT #] ='" + textBox1.Text + "'"; 

然后将该查询的结果输出到文本框或几个文本框中,以便增加要输出的行数。

现在我有这个,但它不工作:

namespace testing 
{ 
    public partial class Form1 : Form 
    { 
     SqlConnection con = new SqlConnection("Data Source=USBA01\\OU3;Initial Catalog=HOU_Project;Integrated Security=True"); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string query = "SELECT TOP 1 [Sender Name],[Subject] " 
          + " from[OLE DB Destination] WHERE[CHAT #] = :chatId "; 
      con.Open(); 
      using (con) 
      { 
       SqlCommand cmd = new SqlCommand(query, con); 
       cmd.Parameters.AddWithValue("chatId", textBox1.Text); 

       SqlDataReader reader = cmd.ExecuteReader(); 

       if (reader.HasRows) 
       { 
        reader.Read(); 
        textBox2.Text = reader[0] + " " + reader[1]; 
       } 

       reader.Close(); 
      } 
     } 
     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 
     } 
    } 
} 

我与这条线得到一个“不正确的语法”错误:

SqlDataReader reader = cmd.ExecuteReader(); 

我是新来的C#,所以我会非常感谢你的帮助。

+0

您的sql查询无效。首先对服务器运行查询。你可以试一下:SELECT TOP 1 [你的col]从[你的数据库] WHERE [你的col] = @param – lucas

+0

删除聊天ID前面的冒号。您可以用“if(reader.Read())”代替HasRows和Read()行。 – LarsTech

回答

1
  1. 随着OleDb您需要使用OleD objects like的OleDbConnection , OleDbCommand`等

  2. 你的查询语法错了,因为你缺少空间。您需要FROM与表名之间以及WHERE与列名之间的空格。

    我不确定:chatId是什么,但是如果您想要与Oracle连接,请使用上面提到的Oracle数据库客户端或OleDb对象。

  3. 此外,您使用SqlConnection是有问题的;您只需在需要时创建实例,并在完成时处置完整实例。