我是C#的新手,需要创建一个小形式的应用程序,它有两个文本框,一个请求[File_ID],然后按下按钮时将该数字发送给查询,另一个文本框显示输出。
我一直在玩它,有类似的东西。但它没有用。我不确定我是否应该朝着不同的方向前进。我真的很感谢你的帮助。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace testing
{
public partial class Form1 : Form
{
String str,dr;
SqlConnection con = new SqlConnection("Data Source=USHOU2016\\USFi;Initial Catalog=HOU_2016_Project;Integrated Security=True");
SqlCommand cmd;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con.Open();
str = "SELECT TOP 1,[Sender Name],[Subject] from [OLE DB Destination] WHERE [CHAT #] ='" + textBox1.Text + "'";
cmd = new SqlCommand(str, con);
// dr = cmd.ExecuteReader();
con.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox1.Text = cmd.ExecuteScalar().ToString();
}
}
}
答案 0 :(得分:0)
您的SQL查询语法错误,应该在下面。在,
之后您还有TOP 1
个删除
SELECT TOP 1 [Sender Name],[Subject] from [OLE DB Destination] WHERE...
再次在按钮单击中,您只是创建命令cmd = new SqlCommand(str, con);
但从不执行它。并关闭连接。
在textBox2_TextChanged
事件处理程序中,您尝试执行查询但连接已经消失。我想你应该考虑阅读有关ADO.NET的时间
答案 1 :(得分:0)
这应该可以解决问题。有几点需要注意:
因为按钮正在执行你的sql并填充第二个文本框,所以不需要textbox_changed事件
使用字符串连接将变量附加到sql查询是不好的做法,使您的代码容易受到Sql Injection的影响。而是参数化您的sql输入,如下面的代码所示。
public partial class Form1 : Form
{
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 ";
using (SqlConnection con = new SqlConnection("Data Source=USHOU2016\\USFi;Initial Catalog=HOU_2016_Project;Integrated Security=True"))
{
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("chatId", textBox1.Text); //use Sql parameters to protect yourself against Sql Injection!
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
textBox2.Text = reader[0] + " " + reader[1]; //or however you want your output formatted
}
reader.close();
}
}
}