C#ExecuteReader()错误。需要将SQL查询输出到文本框

时间:2016-07-29 14:16:27

标签: c# visual-studio

我希望基本上有一个文本框要求提供ID然后有一个按钮,按下后会将ID发送到如下的查询:

 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#的新手,所以我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

  3. 此外,您对SqlConnection的使用也存在问题;您只需在需要时创建实例,并在完成后处理整个实例。